Diff for /linux/kernel/exit.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2018/04/24 18:01:35 version 1.1.1.3, 2018/04/24 18:02:23
Line 94  static void tell_father(int pid) Line 94  static void tell_father(int pid)
                         return;                          return;
                 }                  }
 /* if we don't find any fathers, we just release ourselves */  /* if we don't find any fathers, we just release ourselves */
   /* This is not really OK. Must change it to make father 1 */
           printk("BAD BAD - no father found\n\r");
         release(current);          release(current);
 }  }
   
Line 104  int do_exit(long code) Line 106  int do_exit(long code)
         free_page_tables(get_base(current->ldt[1]),get_limit(0x0f));          free_page_tables(get_base(current->ldt[1]),get_limit(0x0f));
         free_page_tables(get_base(current->ldt[2]),get_limit(0x17));          free_page_tables(get_base(current->ldt[2]),get_limit(0x17));
         for (i=0 ; i<NR_TASKS ; i++)          for (i=0 ; i<NR_TASKS ; i++)
                 if (task[i] && task[i]->father == current->pid)                  if (task[i] && task[i]->father == current->pid) {
                         task[i]->father = 0;                          task[i]->father = 1;
                           if (task[i]->state == TASK_ZOMBIE)
                                   /* assumption task[1] is always init */
                                   (void) send_sig(SIGCHLD, task[1], 1);
                   }
         for (i=0 ; i<NR_OPEN ; i++)          for (i=0 ; i<NR_OPEN ; i++)
                 if (current->filp[i])                  if (current->filp[i])
                         sys_close(i);                          sys_close(i);
Line 113  int do_exit(long code) Line 119  int do_exit(long code)
         current->pwd=NULL;          current->pwd=NULL;
         iput(current->root);          iput(current->root);
         current->root=NULL;          current->root=NULL;
           iput(current->executable);
           current->executable=NULL;
         if (current->leader && current->tty >= 0)          if (current->leader && current->tty >= 0)
                 tty_table[current->tty].pgrp = 0;                  tty_table[current->tty].pgrp = 0;
         if (last_task_used_math == current)          if (last_task_used_math == current)
Line 133  int sys_exit(int error_code) Line 141  int sys_exit(int error_code)
   
 int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options)  int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options)
 {  {
         int flag;          int flag, code;
         struct task_struct ** p;          struct task_struct ** p;
   
         verify_area(stat_addr,4);          verify_area(stat_addr,4);
Line 164  repeat: Line 172  repeat:
                                 current->cutime += (*p)->utime;                                  current->cutime += (*p)->utime;
                                 current->cstime += (*p)->stime;                                  current->cstime += (*p)->stime;
                                 flag = (*p)->pid;                                  flag = (*p)->pid;
                                 put_fs_long((*p)->exit_code,stat_addr);                                  code = (*p)->exit_code;
                                 release(*p);                                  release(*p);
                                   put_fs_long(code,stat_addr);
                                 return flag;                                  return flag;
                         default:                          default:
                                 flag=1;                                  flag=1;

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


unix.superglobalmegacorp.com