From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Bossom, John" To: 'Ross Johnson' , Scott McCaskill Cc: pthreads-win32@sourceware.cygnus.com Subject: RE: #define catch? Date: Wed, 02 Aug 2000 08:42:00 -0000 Message-id: <430F887D415DD1118C2700805F31ECF1037F129B@sota0005.cognos.com> X-SW-Source: 2000/msg00081.html "catch" is actually a keyword in C++... -----Original Message----- From: Ross Johnson [ mailto:rpj@ise.canberra.edu.au ] Sent: Wednesday, August 02, 2000 2:27 AM To: Scott McCaskill Cc: pthreads-win32@sourceware.cygnus.com Subject: Re: #define catch? Scott McCaskill wrote: > > I noticed that pthread.h has a macro that defines 'catch'. (macro > reproduced here for convenience) > > /* > * Redefine the C++ catch keyword to ensure that applications > * propagate our internal exceptions up to the library's internal handlers. > */ > #define catch(E) \ > catch(Pthread_exception_cancel) \ > { \ > throw; \ > } \ > catch(Pthread_exception_exit) \ > { \ > throw; \ > } \ > catch(E) > > This breaks the following legal C++ code (because there will be multiple > catch blocks for Pthread_exception_cancel and Pthread_exception_exit): > > try { > // ... > } > > catch ( some_exception ) { } > > catch ( some_other_exception ) { } Hmmm. When I tested this a long time back the macro seemed to be harmless. The duplication of catch(Pthread_exception_*) blocks appeared to not affect other exception catch blocks. Maybe my testing wasn't good enough. I've been assuming that only the first matching block is executed and duplicates are redundant but ok. Without this any catch(...) inside a thread will prevent cancelation or pthread_exit() from working for that thread. I'm currently looking into this since I'm not happy with the current scheme myself. If anyone has any ideas on how to handle this then please let me know, I'm short on C++ experience. Ross > > Is this breakage really necessary? I understand the reason for this macro, > but perhaps it should at least be optional? For now, I checked out the tree > and commented it out to work around it (admittedly not a great solution, but > I'm not going to rewrite all my code to only use one catch per try). > -- +----------------------+---+ | Ross Johnson | | E-Mail: rpj@ise.canberra.edu.au | Info Sciences and Eng|___| | University of Canberra | FAX: +61 6 2015227 | PO Box 1 | | Belconnen ACT 2616 | WWW: http://willow.canberra.edu.au/~rpj/ | AUSTRALIA | +--------------------------+