Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Oct 2008 21:28:33 -0600
From:      John Hein <jhein@timing.com>
To:        threads@freebsd.org
Subject:   pthread_cleanup_push & pthread_cleanup_pop usage
Message-ID:  <18668.10465.699531.162573@gromit.timing.com>

next in thread | raw e-mail | index | archive | help
In June pthread_cleanup_push & pthread_cleanup_pop were changed to macros
that look like so...

+#define        pthread_cleanup_push(cleanup_routine, cleanup_arg)              \
+               {                                                               \
+                       struct _pthread_cleanup_info __cleanup_info__;          \
+                       __pthread_cleanup_push_imp(cleanup_routine, cleanup_arg,\
+                               &__cleanup_info__);                             \
+                       {
+
+#define        pthread_cleanup_pop(execute)                                    \
+                       }                                                       \
+                       __pthread_cleanup_pop_imp(execute);                     \
+               }
+


This breaks code where the pop is done in an inner block level.

simplified example:

    pthread_cleanup_push(docleanup, &foo);
    try
    {   
        dostuff();
    }
    catch (...)
    {   
        pthread_cleanup_pop(1);
        throw;
    }
    pthread_cleanup_pop(1);

Does anyone have a recommended fix?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?18668.10465.699531.162573>