Projects
Browse Source     Search     Timeline     Wiki

Changeset 23395

Show
Ignore:
Timestamp:
09/17/07 12:41:22 (15 months ago)
Author:
zarzycki@…
Message:

More fallout from:

<rdar://problem/5402927> Bug: launchd_core_logic.c:523 (23327):1: kill(j->p, SIGTERM) != -1

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/launchd/src/launchd_core_logic.c

    r23394 r23395  
    524524        } 
    525525 
    526         job_assumes(j, killpg(j->p, SIGTERM) != -1); 
     526        job_assumes(j, kill(j->p, SIGTERM) != -1); 
    527527        j->sent_sigterm_time = mach_absolute_time(); 
    528528 
     
    19561956                status = 0; 
    19571957                memset(&ru, 0, sizeof(ru)); 
    1958         } else if (!job_assumes(j, wait4(j->p, &status, 0, &ru) != -1)) { 
    1959                 job_log(j, LOG_NOTICE, "Working around 5020256. Assuming the job crashed."); 
    1960  
    1961                 status = W_EXITCODE(0, SIGSEGV); 
    1962  
    1963                 memset(&ru, 0, sizeof(ru)); 
     1958        } else { 
     1959                /* 
     1960                 * The job is dead. While the PID/PGID is still known to be 
     1961                 * valid, try to kill abandoned descendant processes. 
     1962                 * 
     1963                 * We'd use job_assumes(), but POSIX defines consistency over 
     1964                 * correctness, and consequently kill/killpg now returns EPERM 
     1965                 * instead of ESRCH. As luck would have it, ESRCH is the only 
     1966                 * error we can ignore. 
     1967                 */ 
     1968                killpg(j->p, SIGKILL); 
     1969 
     1970                if (!job_assumes(j, wait4(j->p, &status, 0, &ru) != -1)) { 
     1971                        job_log(j, LOG_NOTICE, "Working around 5020256. Assuming the job crashed."); 
     1972 
     1973                        status = W_EXITCODE(0, SIGSEGV); 
     1974                        memset(&ru, 0, sizeof(ru)); 
     1975                } 
    19641976        } 
    19651977 
     
    21482160        } 
    21492161 
    2150         job_assumes(j, killpg(j->p, SIGKILL) != -1); 
     2162        job_assumes(j, kill(j->p, SIGKILL) != -1); 
    21512163 
    21522164        j->sent_sigkill = true;