VirtualBox

Changeset 26395 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 9, 2010 6:08:24 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
57490
Message:

Web service: use multi event sems or else no parallel processing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/VBox/Main/webservice/vboxweb.cpp

    r26394 r26395  
    269269          m_cIdleThreads(0)
    270270    {
    271         RTSemEventCreate(&m_event);
     271        RTSemEventMultiCreate(&m_event);
    272272
    273273        // create cThreads threads
     
    292292    ~SoapQ()
    293293    {
    294         RTSemEventDestroy(m_event);
     294        RTSemEventMultiDestroy(m_event);
    295295    }
    296296
    297297    util::WriteLockHandle   m_mutex;
    298     RTSEMEVENT              m_event;
     298    RTSEMEVENTMULTI         m_event;
    299299
    300300    std::list<SoapThread*>  m_llAllThreads;
     
    314314    {
    315315        // wait for something to happen
    316         RTSemEventWait(pst->pQ->m_event, RT_INDEFINITE_WAIT);
     316        RTSemEventMultiWait(pst->pQ->m_event, RT_INDEFINITE_WAIT);
    317317
    318318        util::AutoWriteLock qlock(pst->pQ->m_mutex COMMA_LOCKVAL_SRC_POS);
     
    322322            pst->pQ->m_llSocketsQ.pop_front();
    323323            --pst->pQ->m_cIdleThreads;
     324
     325            // reset the multi event only if the queue is now empty; otherwise
     326            // another thread will also wake up when we release the mutex and
     327            // process another one
     328            if (pst->pQ->m_llSocketsQ.size() == 0)
     329                RTSemEventMultiReset(pst->pQ->m_event);
     330
    324331            qlock.release();
    325332
     
    398405            WebLog("Request %llu on socket %d queued for processing\n", i, s);
    399406            // unblock one of the worker threads
    400             RTSemEventSignal(soapq.m_event);
     407            RTSemEventMultiSignal(soapq.m_event);
    401408
    402409            // we have to process main event queue
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette