This is the mail archive of the cygwin-patches@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] | |
On Mon, 2002-09-16 at 19:07, Thomas Pfaff wrote: > > > On Tue, 10 Sep 2002, Robert Collins wrote: > > > On Thu, 2002-08-08 at 04:54, Jason Tishler wrote: > > > Thomas, > > > > > > On Wed, Aug 07, 2002 at 09:34:14AM +0200, Thomas Pfaff wrote: > > > > Thanks for tracking it down. > > > > > > No problem. Thanks for the quick turn around on the patch. I tested it > > > and can confirm that it fixes the ipc-daemon service startup problem. > > > > Jason, > > sorry for the *cough* long delay. > > > > the attached patch is the 'right way' to deal with this issue IMO. It > > also gives us full pthread* support for threads created using the win32 > > CreateThread call (although I won't officially support that at this > > point :}). > > > > Rob, > > you may have noticed that i have added similar code in my pending pthread > patches. I hadn't actually. I simply started at the oldest pending thing, and reviewed it. > Anyway, since you return a NULL pointer in pthread_self if something went > wrong i vote for inclusion of my original patch regardless which patch > will be applied for pthread_self. Ah, good catch. I'll return a null object instead. This object will fail in the method call, and log an error. It shouldn't segv though, and we won't be introducing a null object check that doesn't need to exist. I'm checking in the current code, as I refactored to make some things clearer before I introduced the NULL object. Attached is my test program for this.. Rob
#include <pthread.h>
#include <windows.h>
DWORD WINAPI
ThreadFunc (LPVOID lpParam)
{
char szMsg[80];
sprintf (szMsg, "Parameter = %d.", *(DWORD *) lpParam);
// MessageBox (NULL, szMsg, "ThreadFunc", MB_OK);
pthread_cancel(pthread_self());
return 0;
}
int
main (VOID)
{
DWORD dwThreadId, dwThrdParam = 1;
HANDLE hThread;
char szMsg[80];
hThread = CreateThread (NULL, // no security attributes
0, // use default stack size
ThreadFunc, // thread function
&dwThrdParam, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
// Check the return value for success.
if (hThread == NULL)
{
wsprintf (szMsg, "CreateThread failed.");
MessageBox (NULL, szMsg, "main", MB_OK);
}
else
{
sleep(2);
CloseHandle (hThread);
}
}
Attachment:
signature.asc
Description: This is a digitally signed message part
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |