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>
