This is the mail archive of the pthreads-win32@sources.redhat.com mailing list for the pthreas-win32 project.


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

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                |
+--------------------------+

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