fix various bugs
This commit is contained in:
		
							parent
							
								
									bda5186c0d
								
							
						
					
					
						commit
						00d0f794cf
					
				
					 2 changed files with 9 additions and 14 deletions
				
			
		
							
								
								
									
										12
									
								
								BUGS
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								BUGS
									
										
									
									
									
								
							|  | @ -12,15 +12,6 @@ main.c: | |||
| 	cpus[0] -> cpus[bcpu] | ||||
| 
 | ||||
| proc.c: | ||||
| 	comment at top of scheduler() should say | ||||
| 		via longjmp back to the scheduler | ||||
| 	not | ||||
| 		via longjmp back to the top of scheduler | ||||
| 
 | ||||
| 	sched should panic if state == RUNNING. | ||||
| 
 | ||||
| 	forkret comment should say "Return" not "return" | ||||
| 	 | ||||
| 	as a consequence of the implementation of proc_kill, | ||||
| 	any loop calling sleep should check for p->killed | ||||
| 	and be able to break out with an error return. | ||||
|  | @ -28,9 +19,6 @@ proc.c: | |||
| 	can swap procdump up after proc_kill | ||||
| 	and then have proc_exit and proc_wait on same sheet | ||||
| 
 | ||||
| 	proc_exit should wake up proc[1] if any | ||||
| 	reparenting was done. | ||||
| 
 | ||||
| 	sched ->  switch2scheduler?  or just switch? | ||||
| 
 | ||||
| 	factor out switching and scheduling code from process code | ||||
|  |  | |||
							
								
								
									
										11
									
								
								proc.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								proc.c
									
										
									
									
									
								
							|  | @ -207,8 +207,10 @@ sched(void) | |||
| { | ||||
|   struct proc *p = curproc[cpu()]; | ||||
| 
 | ||||
|   if(p->state == RUNNING) | ||||
|     panic("sched running"); | ||||
|   if(!holding(&proc_table_lock)) | ||||
|     panic("sched"); | ||||
|     panic("sched proc_table_lock"); | ||||
|   if(cpus[cpu()].nlock != 1) | ||||
|     panic("sched locks"); | ||||
| 
 | ||||
|  | @ -334,6 +336,9 @@ proc_exit(void) | |||
|   struct proc *cp = curproc[cpu()]; | ||||
|   int fd; | ||||
| 
 | ||||
|   if(cp->pid == 1) | ||||
|     panic("init exiting"); | ||||
| 
 | ||||
|   // Close all open files.
 | ||||
|   for(fd = 0; fd < NOFILE; fd++){ | ||||
|     if(cp->ofile[fd]){ | ||||
|  | @ -354,8 +359,10 @@ proc_exit(void) | |||
| 
 | ||||
|   // Reparent our children to process 1.
 | ||||
|   for(p = proc; p < &proc[NPROC]; p++) | ||||
|     if(p->ppid == cp->pid) | ||||
|     if(p->ppid == cp->pid){ | ||||
|       p->ppid = 1; | ||||
|       wakeup1(&proc[1]);  // init
 | ||||
|     } | ||||
| 
 | ||||
|   // Jump into the scheduler, never to return.
 | ||||
|   cp->killed = 0; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue