|
From: Tom H. <th...@cy...> - 2004-07-19 12:30:26
|
I've finally found out what is causing bug #82114 where some people get assertions in vg_async_signalhandler when a child dies or some other asynchronous signal arrives. The problem is that VG_(gettid) assumes that if the gettid() system call fails with ENOSYS then the getpid() system call will actually get the ID of the current thread rather than that of the process. It seems however that there are some kernels (a 2.4.7 one is where it came up here) that have a getpid() that returns a single value for all threads but which don't have a gettid() system call. As a result the assertions in vg_async_signalhandler that try and ensure it is only called in a proxy thread are firing because it appears to be being called in the main thread even though it isn't. Unfortunately there doesn't seem to be a way to ask the kernel for the thread ID on these systems, so I'm not sure what the best thing is to do about this. Tom -- Tom Hughes (th...@cy...) Software Engineer, Cyberscience Corporation http://www.cyberscience.com/ |