Ticket #9378: mythtv-libmythdb-system.diff

File mythtv-libmythdb-system.diff, 1.4 KB (added by Lawrence Rust <lvr@…>, 13 years ago)
  • mythtv/libs/libmythdb/mythsystem.cpp

    diff --git a/mythtv/libs/libmythdb/mythsystem.cpp b/mythtv/libs/libmythdb/mythsystem.cpp
    index 994ef93..1b99057 100644
    a b  
    4444
    4545#ifndef USING_MINGW
    4646typedef struct {
    47     QMutex  mutex;
     47    QSemaphore ready;
    4848    uint    result;
    4949    time_t  timeout;
    5050    bool    background;
    void MythSystemReaper::run(void) 
    107107            kill(pid, SIGTERM);
    108108            usleep(500);
    109109            kill(pid, SIGKILL);
    110             pidData->mutex.unlock();
     110            pidData->ready.release();
    111111        }
    112112        count = m_pidMap.size();
    113113        m_mapLock.unlock();
    void MythSystemReaper::run(void) 
    167167
    168168        if( pidData->background )
    169169            delete pidData;
    170         else
    171             pidData->mutex.unlock();
     170        else 
     171            pidData->ready.release();
    172172    }
    173173}
    174174
    uint MythSystemReaper::waitPid( pid_t pid, time_t timeout, bool background, 
    185185
    186186    pidData->background = background;
    187187
    188     pidData->mutex.lock();
    189188    m_mapLock.lock();
    190189    m_pidMap.insert( pid, pidData );
    191190    m_mapLock.unlock();
    192191
    193192    if( !background ) {
    194193        /* Now we wait for the thread to see the SIGCHLD */
    195         while( !pidData->mutex.tryLock(100) )
     194        while( !pidData->ready.tryAcquire(1,100) )
    196195            if (processEvents)
    197196                qApp->processEvents();
    198197