New mutex macros to be resued across all rig functions to support async multicast actions

pull/816/head
Mike Black W9MDB 2021-09-28 22:57:35 -05:00
rodzic 8399b4b4dc
commit 43251254c5
1 zmienionych plików z 24 dodań i 10 usunięć

Wyświetl plik

@ -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)