VirtualBox

Changeset 75601 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Nov 19, 2018 9:22:15 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
126771
Message:

Main/HGCMThread: Use an automatic reset event semaphore rather an manual reset one. Saves a kernel call per message. bugref:9172

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/HGCMThread.cpp

    r75541 r75601  
    8585        RTTHREAD m_hThread;
    8686
    87         /* Event the thread waits for, signalled when a message
    88          * to process is posted to the thread.
    89          */
    90         RTSEMEVENTMULTI m_eventThread;
     87        /** Event the thread waits for, signalled when a message to process is posted to
     88         * the thread, automatically reset. */
     89        RTSEMEVENT m_eventThread;
    9190
    9291        /* A caller thread waits for completion of a SENT message on this event. */
     
    216215    m_pvUser(NULL),
    217216    m_hThread(NIL_RTTHREAD),
    218     m_eventThread(NIL_RTSEMEVENTMULTI),
     217    m_eventThread(NIL_RTSEMEVENT),
    219218    m_eventSend(NIL_RTSEMEVENTMULTI),
    220219    m_i32MessagesProcessed(0),
     
    247246    }
    248247
    249     if (m_eventThread != NIL_RTSEMEVENTMULTI)
    250     {
    251         RTSemEventMultiDestroy(m_eventThread);
    252         m_eventThread = NIL_RTSEMEVENTMULTI;
     248    if (m_eventThread != NIL_RTSEMEVENT)
     249    {
     250        RTSemEventDestroy(m_eventThread);
     251        m_eventThread = NIL_RTSEMEVENT;
    253252    }
    254253}
     
    268267int HGCMThread::Initialize(const char *pszThreadName, PFNHGCMTHREAD pfnThread, void *pvUser, const char *pszStatsSubDir, PUVM pUVM)
    269268{
    270     int rc = RTSemEventMultiCreate(&m_eventThread);
     269    int rc = RTSemEventCreate(&m_eventThread);
    271270
    272271    if (RT_SUCCESS(rc))
     
    340339    {
    341340        Log(("hgcmThreadCreate: FAILURE: Can't create an event semaphore for a hgcm worker thread.\n"));
    342         m_eventThread = NIL_RTSEMEVENTMULTI;
     341        m_eventThread = NIL_RTSEMEVENT;
    343342    }
    344343
     
    443442
    444443        /* Inform the worker thread that there is a message. */
    445         RTSemEventMultiSignal(m_eventThread);
     444        RTSemEventSignal(m_eventThread);
    446445
    447446        LogFlow(("HGCMThread::MsgPost: event signalled\n"));
     
    453452            {
    454453                /* Poll infrequently to make sure no completed message has been missed. */
    455                 RTSemEventMultiWait (m_eventSend, 1000);
     454                RTSemEventMultiWait(m_eventSend, 1000);
    456455
    457456                LogFlow(("HGCMThread::MsgPost: wait completed flags = %08X\n", pMsg->m_fu32Flags));
     
    548547
    549548        /* Wait for an event. */
    550         RTSemEventMultiWait (m_eventThread, RT_INDEFINITE_WAIT);
    551         RTSemEventMultiReset (m_eventThread);
     549        RTSemEventWait(m_eventThread, RT_INDEFINITE_WAIT);
    552550    }
    553551
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