Changeset 2fa80a in git for Singular/links/semaphore.c
- Timestamp:
- Nov 6, 2013, 6:07:39 PM (9 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
- Children:
- 823679a657c538153cba3a477bf92e2c9102c451
- Parents:
- 2ea781ea236dc6d65399e46b262e9954538749a1d600e1863951bfc5135d0138b61badb20b1ec70a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/links/semaphore.c
r2ea781 r2fa80a 9 9 # include "simpleipc.h" 10 10 11 #include <Singular/cntrlc.h> 11 12 #include <Singular/si_signals.h> 12 13 … … 23 24 // but are supported more widely. 24 25 25 static sem_t *semaphore[SIPC_MAX_SEMAPHORES]; 26 sem_t *semaphore[SIPC_MAX_SEMAPHORES]; 27 int sem_acquired[SIPC_MAX_SEMAPHORES]; 26 28 27 29 /* return 1 on success, … … 74 76 { 75 77 if ((id<0) || (id >= SIPC_MAX_SEMAPHORES) || (semaphore[id]==NULL)) return -1; 78 defer_shutdown++; 76 79 si_sem_wait(semaphore[id]); 80 sem_acquired[id]++; 81 defer_shutdown--; 82 if (!defer_shutdown && do_shutdown) m2_end(1); 77 83 return 1; 78 84 } … … 81 87 { 82 88 if ((id<0) || (id >= SIPC_MAX_SEMAPHORES) || (semaphore[id]==NULL)) return -1; 83 return !si_sem_trywait(semaphore[id]); 89 defer_shutdown++; 90 int trywait = si_sem_trywait(semaphore[id]); 91 if (!trywait) 92 { 93 sem_acquired[id]++; 94 } 95 defer_shutdown--; 96 if (!defer_shutdown && do_shutdown) m2_end(1); 97 return !trywait; 84 98 } 85 99 … … 87 101 { 88 102 if ((id<0) || (id >= SIPC_MAX_SEMAPHORES) || (semaphore[id]==NULL)) return -1; 103 defer_shutdown++; 89 104 sem_post(semaphore[id]); 105 sem_acquired[id]--; 106 defer_shutdown--; 107 if (!defer_shutdown && do_shutdown) m2_end(1); 90 108 return 1; 91 109 }
Note: See TracChangeset
for help on using the changeset viewer.