diff options
Diffstat (limited to 'sesman/lock.c')
-rw-r--r-- | sesman/lock.c | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/sesman/lock.c b/sesman/lock.c index 9aa3e621..d63f57ec 100644 --- a/sesman/lock.c +++ b/sesman/lock.c @@ -32,14 +32,6 @@ pthread_mutexattr_t lock_chain_attr; /* mutex attributes */ pthread_mutex_t lock_config; /* configuration access lock */ pthread_mutexattr_t lock_config_attr; /* mutex attributes */ -pthread_mutex_t lock_fork; /* this lock protects the counters */ -pthread_mutexattr_t lock_fork_attr; /* mutex attributes */ -sem_t lock_fork_req; /* semaphore on which the process that are going to fork suspend on */ -sem_t lock_fork_wait; /* semaphore on which the suspended process wait on */ -int lock_fork_forkers_count; /* threads that want to fork */ -int lock_fork_blockers_count; /* threads thar are blocking fork */ -int lock_fork_waiting_count; /* threads suspended until the fork finishes */ - sem_t lock_socket; void DEFAULT_CC @@ -55,18 +47,6 @@ lock_init(void) /* initializing config lock */ pthread_mutexattr_init(&lock_config_attr); pthread_mutex_init(&lock_config, &lock_config_attr); - - /* initializing fork lock */ - pthread_mutexattr_init(&lock_fork_attr); - pthread_mutex_init(&lock_chain, &lock_fork_attr); - sem_init(&lock_fork_req, 0, 0); - sem_init(&lock_fork_wait, 0, 0); - - /* here we don't use locking because lock_init() should be called BEFORE */ - /* any thread is created */ - lock_fork_blockers_count=0; - lock_fork_waiting_count=0; - lock_fork_forkers_count=0; } /******************************************************************************/ @@ -105,96 +85,3 @@ lock_socket_release(void) sem_post(&lock_socket); } -/******************************************************************************/ -void DEFAULT_CC -lock_fork_request(void) -{ - /* lock mutex */ - pthread_mutex_lock(&lock_fork); - if (lock_fork_blockers_count == 0) - { - /* if noone is blocking fork(), then we're allowed to fork */ - sem_post(&lock_fork_req); - } - lock_fork_forkers_count++; - pthread_mutex_unlock(&lock_fork); - - /* we wait to be allowed to fork() */ - sem_wait(&lock_fork_req); -} - -/******************************************************************************/ -void DEFAULT_CC -lock_fork_release(void) -{ - pthread_mutex_lock(&lock_fork); - lock_fork_forkers_count--; - - /* if there's someone else that want to fork, we let him fork() */ - if (lock_fork_forkers_count > 0) - { - sem_post(&lock_fork_req); - } - - for (;lock_fork_waiting_count > 0; lock_fork_waiting_count--) - { - /* waking up the other processes */ - sem_post(&lock_fork_wait); - } - pthread_mutex_unlock(&lock_fork); -} - -/******************************************************************************/ -void DEFAULT_CC -lock_fork_critical_section_end(int blocking) -{ - LOG_DBG("lock_fork_critical_secection_end()",0); - /* lock mutex */ - pthread_mutex_lock(&lock_fork); - - if (blocking == SESMAN_LOCK_FORK_BLOCKER) - { - lock_fork_blockers_count--; - } - - /* if there's someone who wants to fork and we're the last blocking */ - /* then we let him go */ - if ((lock_fork_blockers_count == 0) && (lock_fork_forkers_count>0)) - { - sem_post(&lock_fork_req); - } - pthread_mutex_unlock(&lock_fork); -} - -/******************************************************************************/ -int DEFAULT_CC -lock_fork_critical_section_start(void) -{ - LOG_DBG("lock_fork_critical_secection_start()",0); - do - { - pthread_mutex_lock(&lock_fork); - - /* someone requested to fork */ - if (lock_fork_forkers_count > 0) - { - lock_fork_waiting_count++; - pthread_mutex_unlock(&lock_fork); - - /* we wait until the fork finishes */ - sem_wait(&lock_fork_wait); - - } - else - { - /* no fork, so we can go on... */ - lock_fork_blockers_count++; - pthread_mutex_unlock(&lock_fork); - - return SESMAN_LOCK_FORK_BLOCKER; - } - } while (1); - - /* we'll never get here */ - return SESMAN_LOCK_FORK_WAITING; -} |