This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin 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]

pthread_testcancel() causes SEGV


I believe that I have found the root cause to the following:

    http://cygwin.com/ml/cygwin/2002-08/msg00381.html

It seems that pthread_testcancel() will SEGV when called in a non-main
thread or at least one driven by the SCM during service startup.  See
attached for a gdb backtrace.

The following CVS commit seems to be the likely culprit:

    http://cygwin.com/ml/cygwin-cvs/2002-q3/msg00033.html

which is consistent with the fact that 1.3.12 does not exhibit this
problem but snapshots and CVS do.

I annotated pthread::self() as follows:

    pthread *
    pthread::self ()
    {
      pthread *p = (pthread *) TlsGetValue (MT_INTERFACE->thread_self_dwTlsIndex);
      debug_printf ("pthread::self: p = %x, i = %ld", p, MT_INTERFACE->thread_self_dwTlsIndex);
      return p;
    }

When starting ipc-daemon, I get the following:

    87 3097903 [unknown (0xD8C)] ipc-daemon 920 pthread::self: pthread::self: p = 0, i = 4

instead of something like the following (from a non-SCM test case):

    85  121609 [main] open 2504 pthread::self: pthread::self: p = 610CD61C, i = 4

Note that p is 0 in the former and non-zero in the latter.

Unfortunately, I'm not sure how to fix this problem.  Any help will be
greatly appreciated.

Thanks,
Jason

Attachment: ipc-daemon.bt
Description: Text document


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