VirtualBox

Changeset 36749 in vbox


Ignore:
Timestamp:
Apr 20, 2011 11:50:36 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
71283
Message:

VBoxService/GuestCtrl: Fixed getting output data from started process, added more checks.

Location:
trunk/src/VBox/Additions/common/VBoxService
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlExecThread.cpp

    r36732 r36749  
    304304            if (RT_SUCCESS(rc))
    305305            {
    306                 uint32_t cbRead;
     306                uint32_t cbRead = cbSize;
    307307                rc = VBoxServicePipeBufRead(pPipeBuf, pBuf, cbSize, &cbRead);
    308308                if (RT_SUCCESS(rc))
     
    315315        else
    316316            rc = VERR_NOT_FOUND; /* PID not found! */
    317         RTCritSectLeave(&g_GuestControlExecThreadsCritSect);
     317
     318        int rc2 = RTCritSectLeave(&g_GuestControlExecThreadsCritSect);
     319        if (RT_SUCCESS(rc))
     320            rc = rc2;
    318321    }
    319322    return rc;
     
    374377        }
    375378
    376         rc = RTCritSectLeave(&g_GuestControlExecThreadsCritSect);
    377         AssertRC(rc);
     379        int rc2 = RTCritSectLeave(&g_GuestControlExecThreadsCritSect);
     380        if (RT_SUCCESS(rc))
     381            rc = rc2;
    378382    }
    379383    RTCritSectDelete(&g_GuestControlExecThreadsCritSect);
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServicePipeBuf.cpp

    r36744 r36749  
    6464            {
    6565                RTCritSectDelete(&pBuf->CritSect);
    66                 RTSemEventDestroy(pBuf->hEventSem);
     66                if (pBuf->hEventSem != NIL_RTSEMEVENT)
     67                    RTSemEventDestroy(pBuf->hEventSem);
    6768            }
    6869        }
     
    8990    AssertReturn(cbBuffer, VERR_INVALID_PARAMETER);
    9091    AssertPtrReturn(pcbToRead, VERR_INVALID_POINTER);
     92    AssertReturn(*pcbToRead > 0, VERR_INVALID_PARAMETER); /* Nothing to read makes no sense ... */
    9193
    9294    int rc = RTCritSectEnter(&pBuf->CritSect);
     
    105107            pBuf->cbOffset += *pcbToRead;
    106108
    107             rc = RTSemEventSignal(pBuf->hEventSem);
    108             AssertRC(rc);
     109            if (pBuf->hEventSem != NIL_RTSEMEVENT)
     110            {
     111                rc = RTSemEventSignal(pBuf->hEventSem);
     112                AssertRC(rc);
     113            }
    109114        }
    110115        else
     
    113118            *pcbToRead = 0;
    114119        }
    115         rc = RTCritSectLeave(&pBuf->CritSect);
     120
     121        int rc2 = RTCritSectLeave(&pBuf->CritSect);
     122        if (RT_SUCCESS(rc))
     123            rc = rc2;
    116124    }
    117125    return rc;
     
    256264                    *pcbWritten = cbData;
    257265
    258                 RTSemEventSignal(pBuf->hEventSem);
     266                if (pBuf->hEventSem != NIL_RTSEMEVENT)
     267                {
     268                    rc = RTSemEventSignal(pBuf->hEventSem);
     269                    AssertRC(rc);
     270                }
    259271            }
    260272        }
     
    275287    AssertPtrReturn(pBuf, VERR_INVALID_POINTER);
    276288    AssertPtrReturn(pcbWritten, VERR_INVALID_POINTER);
     289    AssertPtrReturn(pcbLeft, VERR_INVALID_POINTER);
    277290
    278291    int rc = RTCritSectEnter(&pBuf->CritSect);
Note: See TracChangeset for help on using the changeset viewer.

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