From: compudj Date: Fri, 2 Feb 2007 05:30:28 +0000 (+0000) Subject: signal fix X-Git-Tag: v0.12.20~1136 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=3a99c38e39bf9674d8f4752e7fc23ca06f9b5031;p=lttv.git signal fix git-svn-id: http://ltt.polymtl.ca/svn@2353 04897980-b3bd-0310-b5e0-8ef037075253 --- diff --git a/ltt-usertrace/ltt/ltt-usertrace-fast.h b/ltt-usertrace/ltt/ltt-usertrace-fast.h index b90a1006..7c295e4b 100644 --- a/ltt-usertrace/ltt/ltt-usertrace-fast.h +++ b/ltt-usertrace/ltt/ltt-usertrace-fast.h @@ -366,6 +366,16 @@ static inline void * __attribute__((no_instrument_function)) ltt_reserve_slot( int consumed_old, consumed_new; int commit_count, reserve_count; int ret; + sigset_t oldset, set; + + /* sem_wait is not signal safe. Disable signals around it. */ + + /* Disable signals */ + ret = sigfillset(&set); + if(ret) perror("LTT Error in sigfillset\n"); + + ret = pthread_sigmask(SIG_BLOCK, &set, &oldset); + if(ret) perror("LTT Error in pthread_sigmask\n"); do { offset_old = atomic_read(<t_buf->offset); @@ -411,22 +421,9 @@ static inline void * __attribute__((no_instrument_function)) ltt_reserve_slot( //if((SUBBUF_TRUNC(offset_begin, ltt_buf) // - SUBBUF_TRUNC(atomic_read(<t_buf->consumed), ltt_buf)) // >= ltt_buf->alloc_size) { - /* sem_wait is not signal safe. Disable signals around it. */ { - sigset_t oldset, set; - - /* Disable signals */ - ret = sigfillset(&set); - if(ret) perror("LTT Error in sigfillset\n"); - - ret = pthread_sigmask(SIG_BLOCK, &set, &oldset); - if(ret) perror("LTT Error in pthread_sigmask\n"); - sem_wait(<t_buf->writer_sem); - /* Enable signals */ - ret = pthread_sigmask(SIG_SETMASK, &oldset, NULL); - if(ret) perror("LTT Error in pthread_sigmask\n"); } /* go on with the write */ @@ -466,6 +463,9 @@ static inline void * __attribute__((no_instrument_function)) ltt_reserve_slot( } while(atomic_cmpxchg(<t_buf->offset, offset_old, offset_end) != offset_old); + /* Enable signals */ + ret = pthread_sigmask(SIG_SETMASK, &oldset, NULL); + if(ret) perror("LTT Error in pthread_sigmask\n"); /* Push the reader if necessary */ do {