URL: <http://savannah.gnu.org/bugs/?46261>
Summary: missing usage of EINTRLOOP macro Project: make Submitted by: jwhowarth Submitted on: Wed 21 Oct 2015 02:02:48 AM GMT Severity: 3 - Normal Item Group: Bug Status: None Privacy: Public Assigned to: None Open/Closed: Open Discussion Lock: Any Component Version: 4.1 Operating System: POSIX-Based Fixed Release: None Triage Status: None _______________________________________________________ Details: The fink project has found that their package manager (which uses flock() under perl) triggers a race condition in make 4.1 producing build failures of the form... make: INTERNAL: Exiting with 1 jobserver tokens available; should be 8! on OS X 10.12. The following code in main.c is suspected... 3365 /* Close the write side, so the read() won't hang. */ 3366 close (job_fds[1]); 3367 3368 while (read (job_fds[0], &token, 1) == 1) 3369 ++tcnt; 3370 #endif 3371 3372 if (tcnt != master_job_slots) 3373 ONN (error, NILF, 3374 "INTERNAL: Exiting with %u jobserver tokens available; should be %u!", 3375 tcnt, master_job_slots); 3376 3377 #ifdef WINDOWS32 3378 free_jobserver_semaphore (); 3379 #else 3380 close (job_fds[0]); 3381 #endif 3382 as the section... while (read (job_fds[0], &token, 1) == 1) ++tcnt; seems to be missing the usage of the EINTRLOOP() macro and the reads could fail with EINTR resulting in tcnt being left at 1 as observed when make 4.1 is executed from perl with prior flock() usage in the perl scripts. Any idea how to adjust those two lines to properly use the EINTRLOOP() macro? _______________________________________________________ Reply to this item at: <http://savannah.gnu.org/bugs/?46261> _______________________________________________ Message sent via/by Savannah http://savannah.gnu.org/ _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make