This repository was archived by the owner on Aug 19, 2021. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +9
-28
lines changed Expand file tree Collapse file tree 3 files changed +9
-28
lines changed Original file line number Diff line number Diff line change 2020CFLAGS += -I.
2121CFLAGS += -std=c99
2222CFLAGS += -Wall
23- CFLAGS += -D_XOPEN_SOURCE=500
23+ CFLAGS += -D_XOPEN_SOURCE=600
2424
2525LFLAGS += -lpthread
2626
Original file line number Diff line number Diff line change @@ -40,46 +40,30 @@ void events_mutex_unlock(events_mutex_t *m) {
4040}
4141
4242
43+ // Semaphore operations
4344int events_sema_create (events_sema_t * s ) {
44- int err = pthread_mutex_init (& s -> mutex , 0 );
45- if (err ) {
46- return err ;
47- }
48-
49- err = pthread_cond_init (& s -> cond , 0 );
50- if (err ) {
51- return err ;
52- }
53-
54- return 0 ;
45+ return sem_init (s , 0 , 0 );
5546}
5647
5748void events_sema_destroy (events_sema_t * s ) {
58- pthread_mutex_destroy (& s -> mutex );
59- pthread_cond_destroy (& s -> cond );
49+ sem_destroy (s );
6050}
6151
6252void events_sema_release (events_sema_t * s ) {
63- pthread_cond_signal ( & s -> cond );
53+ sem_post ( s );
6454}
6555
6656bool events_sema_wait (events_sema_t * s , int ms ) {
67- int err ;
68- pthread_mutex_lock (& s -> mutex );
69-
7057 if (ms < 0 ) {
71- err = pthread_cond_wait ( & s -> cond , & s -> mutex );
58+ return ! sem_wait ( s );
7259 } else {
7360 ms += events_tick ();
7461 struct timespec ts = {
7562 .tv_sec = ms /1000 ,
7663 .tv_nsec = ms * 1000000 ,
7764 };
78- err = pthread_cond_timedwait ( & s -> cond , & s -> mutex , & ts );
65+ return ! sem_timedwait ( s , & ts );
7966 }
80-
81- pthread_mutex_unlock (& s -> mutex );
82- return !err ;
8367}
8468
8569#endif
Original file line number Diff line number Diff line change @@ -19,11 +19,8 @@ extern "C" {
1919// Optimal implementation is a binary semaphore,
2020// however a regular semaphore is sufficient.
2121#if defined(__unix__ )
22- #include <pthread.h>
23- typedef struct {
24- pthread_mutex_t mutex ;
25- pthread_cond_t cond ;
26- } events_sema_t ;
22+ #include <semaphore.h>
23+ typedef sem_t events_sema_t ;
2724#elif defined(__MBED__ )
2825#ifdef MBED_CONF_RTOS_PRESENT
2926typedef void * events_sema_t ;
You can’t perform that action at this time.
0 commit comments