From 1b1c0b657a8407bdc5910b1bbb7de70f4de261e8 Mon Sep 17 00:00:00 2001 From: Steven Dake Date: Tue, 24 Mar 2009 16:03:46 +0000 Subject: [PATCH] Appears to fix compile errors on macosx. git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1909 fd59a12c-fef9-0310-b244-a6a79926bd2f --- exec/logsys.c | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/exec/logsys.c b/exec/logsys.c index b9f1f89d..54d86ff6 100644 --- a/exec/logsys.c +++ b/exec/logsys.c @@ -139,7 +139,11 @@ static pthread_cond_t logsys_cond; static pthread_mutex_t logsys_cond_mutex; +#if defined(HAVE_PTHREAD_SPIN_LOCK) static pthread_spinlock_t logsys_idx_spinlock; +#else +static pthread_mutex_t logsys_idx_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif static unsigned int log_rec_idx; @@ -185,6 +189,27 @@ static inline void my_memcpy_8bit (char *dest, char *src, unsigned int bytes) } } +#if defined(HAVE_PTHREAD_SPIN_LOCK) +static void logsys_lock (void) +{ + pthread_spin_lock (&logsys_idx_spinlock); +} +static void logsys_unlock (void) +{ + pthread_spin_unlock (&logsys_idx_spinlock); +} +#else +static void logsys_lock (void) +{ + pthread_mutex_lock (&logsys_idx_mutex); +} +static void logsys_unlock (void) +{ + pthread_mutex_unlock (&logsys_idx_mutex); +} +#endif + + /* * Before any write operation, a reclaim on the buffer area must be executed */ @@ -201,7 +226,7 @@ static inline void records_reclaim (unsigned int idx, unsigned int words) return; } - pthread_spin_lock (&logsys_idx_spinlock); + logsys_lock(); if (flt_data[FDTAIL_INDEX] > flt_data[FDHEAD_INDEX]) { if (idx + words >= flt_data[FDTAIL_INDEX]) { should_reclaim = 1; @@ -230,7 +255,7 @@ static inline void records_reclaim (unsigned int idx, unsigned int words) } } while (words_needed > 0); } - pthread_spin_unlock (&logsys_idx_spinlock); + logsys_unlock(); } #define idx_word_step(idx) \ @@ -479,9 +504,9 @@ static void *logsys_worker_thread (void *data) * Signal wthread_create that the initialization process may continue */ wthread_signal (); - pthread_spin_lock (&logsys_idx_spinlock); + logsys_lock(); log_rec_idx = flt_data[FDTAIL_INDEX]; - pthread_spin_unlock (&logsys_idx_spinlock); + logsys_unlock(); for (;;) { wthread_wait (); @@ -495,21 +520,21 @@ static void *logsys_worker_thread (void *data) * Process any pending log messages here */ for (;;) { - pthread_spin_lock (&logsys_idx_spinlock); + logsys_lock(); if (log_requests_lost > 0) { printf ("lost %d log requests\n", log_requests_lost); log_requests_pending -= log_requests_lost; log_requests_lost = 0; } if (log_requests_pending == 0) { - pthread_spin_unlock (&logsys_idx_spinlock); + logsys_unlock(); break; } log_rec_idx = record_read (buf, log_rec_idx, &log_msg); if (log_msg) { log_requests_pending -= 1; } - pthread_spin_unlock (&logsys_idx_spinlock); + logsys_unlock(); /* * print the stored buffer @@ -592,7 +617,10 @@ int _logsys_rec_init (unsigned int size) assert (flt_data != NULL); flt_data[FDHEAD_INDEX] = 0; flt_data[FDTAIL_INDEX] = 0; + +#if defined(HAVE_PTHREAD_SPIN_LOCK) pthread_spin_init (&logsys_idx_spinlock, 0); +#endif return (0); } @@ -752,7 +780,7 @@ void _logsys_log_rec ( * and this is not a log_printf operation, set the log_rec_idx to * the new head position and commit the new head. */ - pthread_spin_lock (&logsys_idx_spinlock); + logsys_lock(); if (rec_ident & LOGSYS_TAG_LOG) { log_requests_pending += 1; } @@ -760,7 +788,7 @@ void _logsys_log_rec ( log_rec_idx = idx; } flt_data[FDHEAD_INDEX] = idx; - pthread_spin_unlock (&logsys_idx_spinlock); + logsys_unlock(); records_written++; } -- 2.39.5