uspace_rtapi_app: thread_lock should have been shared among all threads
.. but it never was.
This commit is contained in:
parent
e060ed4418
commit
c1fdb1a58f
1 changed files with 12 additions and 3 deletions
|
|
@ -615,8 +615,9 @@ struct Posix : RtapiApp
|
||||||
{
|
{
|
||||||
Posix(int policy = SCHED_FIFO) : RtapiApp(policy), do_thread_lock(policy != SCHED_FIFO) {
|
Posix(int policy = SCHED_FIFO) : RtapiApp(policy), do_thread_lock(policy != SCHED_FIFO) {
|
||||||
pthread_once(&key_once, init_key);
|
pthread_once(&key_once, init_key);
|
||||||
if(do_thread_lock)
|
if(do_thread_lock) {
|
||||||
pthread_mutex_init(&thread_lock, 0);
|
pthread_once(&lock_once, init_lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int task_delete(int id);
|
int task_delete(int id);
|
||||||
int task_start(int task_id, unsigned long period_nsec);
|
int task_start(int task_id, unsigned long period_nsec);
|
||||||
|
|
@ -634,7 +635,6 @@ struct Posix : RtapiApp
|
||||||
int run_threads(int fd, int (*callback)(int fd));
|
int run_threads(int fd, int (*callback)(int fd));
|
||||||
static void *wrapper(void *arg);
|
static void *wrapper(void *arg);
|
||||||
bool do_thread_lock;
|
bool do_thread_lock;
|
||||||
pthread_mutex_t thread_lock;
|
|
||||||
|
|
||||||
static pthread_once_t key_once;
|
static pthread_once_t key_once;
|
||||||
static pthread_key_t key;
|
static pthread_key_t key;
|
||||||
|
|
@ -642,6 +642,13 @@ struct Posix : RtapiApp
|
||||||
pthread_key_create(&key, NULL);
|
pthread_key_create(&key, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pthread_once_t lock_once;
|
||||||
|
static pthread_mutex_t thread_lock;
|
||||||
|
static void init_lock(void) {
|
||||||
|
pthread_mutexattr_t attr;
|
||||||
|
pthread_mutex_init(&thread_lock, &attr);
|
||||||
|
}
|
||||||
|
|
||||||
long long do_get_time(void) {
|
long long do_get_time(void) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
|
@ -1039,7 +1046,9 @@ int Posix::task_start(int task_id, unsigned long int period_nsec)
|
||||||
#define RTAPI_CLOCK (CLOCK_MONOTONIC)
|
#define RTAPI_CLOCK (CLOCK_MONOTONIC)
|
||||||
|
|
||||||
pthread_once_t Posix::key_once = PTHREAD_ONCE_INIT;
|
pthread_once_t Posix::key_once = PTHREAD_ONCE_INIT;
|
||||||
|
pthread_once_t Posix::lock_once = PTHREAD_ONCE_INIT;
|
||||||
pthread_key_t Posix::key;
|
pthread_key_t Posix::key;
|
||||||
|
pthread_mutex_t Posix::thread_lock;
|
||||||
|
|
||||||
void *Posix::wrapper(void *arg)
|
void *Posix::wrapper(void *arg)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue