This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Bug in testsuite/gdb.base/tls.c


Michael Elizabeth Chastain writes:
 > I'm seeing a lot of test suite hangs with the new tls.c.
 > I tracked it down to this code:
 > 
 >   for( i = 0; i < N_THREADS; i++ )
 >     {
 >       do
 > 	{
 > 	  errno = 0;
 > 
 > 	  if (sem_wait (&tell_main) == -1)
 > 	    {
 > 	      if (errno != EINTR)
 > 		{
 > 		  ...
 > 		  return;
 > 		}
 > 	      ...
 > 	    }
 > 	  }
 > 	  while (errno == EINTR);
 >     }
 > 
 > It turns out that errno can be EINTR even when the return value is 0!
 > That screws up the loop counter.

Whoops, never seen this one happening on my systems, just (bad) luck I guess.

 > 
 > This happened with Red Hat Linux 8, glibc 2.2.93-5-rh.  It is sensitive
 > to the placement of breakpoints, which is not surprising.
 > 
 > I think it's normal Unix semantics that when the return value is zero,
 > errno has no meaning.

Yes, true. 

"All semaphore functions introduced by POSIX.1b use the old error
reporting mechanism. These functions return 0 on success and -1 on
error, with errno set to the appropriate error"

Note how it carefully avoids mentioning what happens to errno in case
of success.

 > 
 > I'll code up a patch for tls.c, on those lines.
 > 

thanks
elena


 > Michael C


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]