diff --git a/src/rig.c b/src/rig.c index 8fb69daa9..be2cd872e 100644 --- a/src/rig.c +++ b/src/rig.c @@ -160,6 +160,8 @@ const char hamlib_copyright[231] = /* hamlib 1.2 ABI specifies 231 bytes */ #define ELAPSED1 clock_t __begin = clock() #define ELAPSED2 rig_debug(RIG_DEBUG_TRACE, "%s: elapsed=%.0lfms\n", __func__, ((double)clock() - __begin) / CLOCKS_PER_SEC * 1000) +#define LOCK \ + /* * Data structure to track the opened rig (by rig_open) */ @@ -2266,6 +2268,7 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { RETURNFUNC(-RIG_EINVAL); } + ELAPSED1; // do not mess with mode while PTT is on @@ -6788,6 +6791,24 @@ const char *HAMLIB_API rig_copyright() return hamlib_copyright2; } +#ifdef PTHREAD +#define MUTEX(var) static pthread_mutex_t var = PTHREAD_MUTEX_INITIALIZER +#else +#define MUTEX(var) +#endif + +#ifdef PTHREAD +#define MUTEX_LOCK(var) pthread_mutex_lock(var) +#else +#define MUTEX_LOCK1(var) +#endif + +#ifdef PTHREAD +#define MUTEX_UNLOCK(var) pthread_mutex_unlock(var) +#else +#define MUTEX_UNLOCK2(var) +#endif + /** * \brief get a cookie to grab rig control * \param rig Not used @@ -6823,9 +6844,7 @@ int HAMLIB_API rig_cookie(RIG *rig, enum cookie_e cookie_cmd, char *cookie, static double time_last_used; struct timespec tp; int ret; -#ifdef HAVE_PTHREAD - static pthread_mutex_t cookie_lock = PTHREAD_MUTEX_INITIALIZER; -#endif + MUTEX(mutex_rig_cookie); /* This is not needed for RIG_COOKIE_RELEASE but keep it simple. */ if (cookie_len < HAMLIB_COOKIE_SIZE) @@ -6844,9 +6863,7 @@ int HAMLIB_API rig_cookie(RIG *rig, enum cookie_e cookie_cmd, char *cookie, /* Accesing cookie_save and time_last_used must be done with lock held. * So keep code simple and lock it during the whole operation. */ -#ifdef HAVE_PTHREAD - pthread_mutex_lock(&cookie_lock); -#endif + MUTEX_LOCK(mutex_rig_cookie); switch (cookie_cmd) { @@ -6937,11 +6954,8 @@ int HAMLIB_API rig_cookie(RIG *rig, enum cookie_e cookie_cmd, char *cookie, break; } -#ifdef HAVE_PTHREAD - pthread_mutex_unlock(&cookie_lock); -#endif + MUTEX_UNLOCK(mutex_rig_cookie); return ret; - } HAMLIB_EXPORT(void) sync_callback(int lock)