bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #46261] missing usage of EINTRLOOP macro


From: Jack Howarth
Subject: [bug #46261] missing usage of EINTRLOOP macro
Date: Wed, 21 Oct 2015 02:02:49 +0000
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7

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/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]