Line data Source code
1 : #include <string.h> 2 : #include "netio/netio.h" 3 : 4 : 5 : static void 6 22112319 : check_and_trigger(struct netio_semaphore* sem) 7 : { 8 22112319 : if(sem->threshold > 0 && sem->current >= sem->threshold) { 9 10805976 : if(sem->cb) { 10 10805976 : sem->cb(sem->data); 11 : } 12 10805976 : sem->threshold = 0; // semaphores only fire once 13 : } 14 22112319 : } 15 : 16 10805978 : void netio_semaphore_init(struct netio_semaphore* sem, unsigned threshold) 17 : { 18 10805978 : memset(sem, 0, sizeof(*sem)); 19 10805978 : sem->threshold = threshold; 20 10805978 : sem->current = 0; 21 10805978 : } 22 : 23 : 24 11306345 : void netio_semaphore_increment(struct netio_semaphore* sem, unsigned n) 25 : { 26 11306345 : sem->current += n; 27 11306345 : check_and_trigger(sem); 28 11306345 : } 29 : 30 : 31 10805974 : void netio_semphore_set_threshold(struct netio_semaphore* sem, unsigned t) 32 : { 33 10805974 : sem->threshold = t; 34 10805974 : check_and_trigger(sem); 35 10805974 : }