kopia lustrzana https://github.com/Hamlib/Hamlib
Make set_transaction functions use intra process mutex -- Phase 1
Phase 2 will be inter-process named mutexes https://github.com/Hamlib/Hamlib/issues/942pull/948/head
rodzic
388738b78b
commit
1beebfc835
|
@ -33,6 +33,10 @@
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include "config.h"
|
||||||
|
#ifdef HAVE_PTHREAD
|
||||||
|
#include <pthread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Rig list is in a separate file so as not to mess up w/ this one */
|
/* Rig list is in a separate file so as not to mess up w/ this one */
|
||||||
#include <hamlib/riglist.h>
|
#include <hamlib/riglist.h>
|
||||||
|
@ -2447,6 +2451,9 @@ struct rig_state {
|
||||||
void *async_data_handler_priv_data;
|
void *async_data_handler_priv_data;
|
||||||
volatile int poll_routine_thread_run;
|
volatile int poll_routine_thread_run;
|
||||||
void *poll_routine_priv_data;
|
void *poll_routine_priv_data;
|
||||||
|
#ifdef HAVE_PTHREAD
|
||||||
|
pthread_mutex_t mutex_set_transaction;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
//! @cond Doxygen_Suppress
|
//! @cond Doxygen_Suppress
|
||||||
|
|
10
src/misc.h
10
src/misc.h
|
@ -26,13 +26,15 @@
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Careful!! These macros are NOT reentrant!
|
|
||||||
* ie. they may not be executed atomically,
|
|
||||||
* thus not ensure mutual exclusion.
|
|
||||||
* Fix it when making Hamlib reentrant! --SF
|
|
||||||
*/
|
*/
|
||||||
|
#ifdef HAVE_PTHREAD
|
||||||
|
#include <pthread.h>
|
||||||
|
#define set_transaction_active(rig) {pthread_mutex_lock(&rig->state.mutex_set_transaction);(rig)->state.transaction_active = 1;}
|
||||||
|
#define set_transaction_inactive(rig) {(rig)->state.transaction_active = 0;pthread_mutex_unlock(&rig->state.mutex_set_transaction);}
|
||||||
|
#else
|
||||||
#define set_transaction_active(rig) {(rig)->state.transaction_active = 1;}
|
#define set_transaction_active(rig) {(rig)->state.transaction_active = 1;}
|
||||||
#define set_transaction_inactive(rig) {(rig)->state.transaction_active = 0;}
|
#define set_transaction_inactive(rig) {(rig)->state.transaction_active = 0;}
|
||||||
|
#endif
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
|
|
@ -451,6 +451,9 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
|
||||||
* TODO: read the Preferences here!
|
* TODO: read the Preferences here!
|
||||||
*/
|
*/
|
||||||
rs = &rig->state;
|
rs = &rig->state;
|
||||||
|
#ifdef HAVE_PTHREAD
|
||||||
|
pthread_mutex_init(&rs->mutex_set_transaction, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
rs->async_data_enabled = 0;
|
rs->async_data_enabled = 0;
|
||||||
rs->rigport.fd = -1;
|
rs->rigport.fd = -1;
|
||||||
|
|
Ładowanie…
Reference in New Issue