delorie.com/archives/browse.cgi | search |
On Thu, Sep 16, 1999 at 10:29:50AM -0500, Mumit Khan wrote: >Another issue when you're dealing with thread start routines -- it's >almost always better to malloc the the parameter argument instead of >passing the address of a stack data element. It'll work in the current >usages in winsup, but this usage can lead to very subtle and hard to >track errors. That's probably because, AFAICT, in every case where the argument is non-NULL it *is* malloced. >> The other question is why didn't the compiler catch this problem? > >The C++ front-end has trouble catching these. Try the following: > > #include <windows.h> > > extern int foo (LPTHREAD_START_ROUTINE); > static DWORD bar (void *) { return 0; } > static DWORD WINAPI bar2 (void *) { return 0; } > > int > main () > { > foo (bar); > foo (bar2); > return 0; > } > >And you'll see why I resist using anything but the cdecl calling >convention in my code. The C front-end does do the right thing. Yes. It's obviously broken. The winsup code proves that. cgf
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |