diff options
| author | Pixel <pixel@nobis-crew.org> | 2011-12-05 09:16:42 -0800 | 
|---|---|---|
| committer | Pixel <pixel@nobis-crew.org> | 2011-12-05 09:16:42 -0800 | 
| commit | 2f36082049c30562f2cb3061438c4aaebc8d8fe5 (patch) | |
| tree | c1a93f96750cce63e9801b0907499c8a4d2b969e /src | |
| parent | b419f3e159212c9998b3f86c1fee332620472f4e (diff) | |
Adding read-write locks, and applying them immediately to the http server.
Diffstat (limited to 'src')
| -rw-r--r-- | src/HttpServer.cc | 6 | ||||
| -rw-r--r-- | src/Threads.cc | 14 | 
2 files changed, 17 insertions, 3 deletions
diff --git a/src/HttpServer.cc b/src/HttpServer.cc index d96dd2b..e2ff180 100644 --- a/src/HttpServer.cc +++ b/src/HttpServer.cc @@ -534,14 +534,14 @@ void Balau::HttpServer::stop() {  }  void Balau::HttpServer::registerAction(Action * action) { -    m_actionsLock.enter(); +    m_actionsLock.enterW();      action->ref();      m_actions.push_front(action);      m_actionsLock.leave();  }  void Balau::HttpServer::flushAllActions() { -    m_actionsLock.enter(); +    m_actionsLock.enterW();      Action * a;      while (!m_actions.empty()) {          a = m_actions.front(); @@ -563,7 +563,7 @@ Balau::HttpServer::Action::ActionMatch Balau::HttpServer::Action::matches(const  }  Balau::HttpServer::ActionFound Balau::HttpServer::findAction(const char * uri, const char * host) { -    m_actionsLock.enter(); +    m_actionsLock.enterR();      ActionList::iterator i;      ActionFound r; diff --git a/src/Threads.cc b/src/Threads.cc index de70933..fe90394 100644 --- a/src/Threads.cc +++ b/src/Threads.cc @@ -22,6 +22,20 @@ Balau::Lock::Lock() {      RAssert(r == 0, "Couldn't set mutex attribute; r = %i", r);      r = pthread_mutex_init(&m_lock, &attr);      RAssert(r == 0, "Couldn't initialize mutex; r = %i", r); +    r = pthread_mutexattr_destroy(&attr); +    RAssert(r == 0, "Couldn't destroy mutex attribute; r = %i", r); +} + +Balau::RWLock::RWLock() { +    int r; +    pthread_rwlockattr_t attr; + +    r = pthread_rwlockattr_init(&attr); +    RAssert(r == 0, "Couldn't initialize rwlock attribute; r = %i", r); +    r = pthread_rwlock_init(&m_lock, &attr); +    RAssert(r == 0, "Couldn't initialize mutex; r = %i", r); +    r = pthread_rwlockattr_destroy(&attr); +    RAssert(r == 0, "Couldn't destroy rwlock attribute; r = %i", r);  }  void * Balau::ThreadHelper::threadProc(void * arg) {  | 
