Changeset 63153 in vbox for trunk/src/VBox/Main
- Timestamp:
- Aug 8, 2016 12:00:20 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 109771
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/GuestProcessImpl.h
r61792 r63153 53 53 int i_onRemove(void); 54 54 int i_readData(uint32_t uHandle, uint32_t uSize, uint32_t uTimeoutMS, void *pvData, size_t cbData, uint32_t *pcbRead, int *pGuestRc); 55 int i_startProcess(uint32_t uTimeoutMS, int *pGuestRc); 55 int i_startProcess(uint32_t cMsTimeout, int *pGuestRc); 56 int i_startProcessInner(uint32_t cMsTimeout, AutoWriteLock &rLock, GuestWaitEvent *pEvent, int *pGuestRc); 56 57 int i_startProcessAsync(void); 57 58 int i_terminateProcess(uint32_t uTimeoutMS, int *pGuestRc); -
trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp
r62157 r63153 1006 1006 } 1007 1007 1008 int GuestProcess::i_startProcess(uint32_t uTimeoutMS, int *pGuestRc)1009 { 1010 LogFlowThisFunc((" uTimeoutMS=%RU32, procExe=%s, procTimeoutMS=%RU32, procFlags=%x, sessionID=%RU32\n",1011 uTimeoutMS, mData.mProcess.mExecutable.c_str(), mData.mProcess.mTimeoutMS, mData.mProcess.mFlags,1008 int GuestProcess::i_startProcess(uint32_t cMsTimeout, int *pGuestRc) 1009 { 1010 LogFlowThisFunc(("cMsTimeout=%RU32, procExe=%s, procTimeoutMS=%RU32, procFlags=%x, sessionID=%RU32\n", 1011 cMsTimeout, mData.mProcess.mExecutable.c_str(), mData.mProcess.mTimeoutMS, mData.mProcess.mFlags, 1012 1012 mSession->i_getId())); 1013 1013 … … 1025 1025 { 1026 1026 eventTypes.push_back(VBoxEventType_OnGuestProcessStateChanged); 1027 1028 1027 vrc = registerWaitEvent(eventTypes, &pEvent); 1029 1028 } … … 1032 1031 vrc = VERR_NO_MEMORY; 1033 1032 } 1034 1035 1033 if (RT_FAILURE(vrc)) 1036 1034 return vrc; 1037 1035 1036 vrc = i_startProcessInner(cMsTimeout, alock, pEvent, pGuestRc); 1037 1038 unregisterWaitEvent(pEvent); 1039 1040 LogFlowFuncLeaveRC(vrc); 1041 return vrc; 1042 } 1043 1044 int GuestProcess::i_startProcessInner(uint32_t cMsTimeout, AutoWriteLock &rLock, GuestWaitEvent *pEvent, int *pGuestRc) 1045 { 1038 1046 GuestSession *pSession = mSession; 1039 1047 AssertPtr(pSession); … … 1044 1052 1045 1053 /* Prepare arguments. */ 1054 size_t cArgs = mData.mProcess.mArguments.size(); 1055 if (cArgs >= 128*1024) 1056 return VERR_BUFFER_OVERFLOW; 1057 1046 1058 char *pszArgs = NULL; 1047 size_t cArgs = mData.mProcess.mArguments.size(); 1048 if (cArgs >= UINT32_MAX) 1049 vrc = VERR_BUFFER_OVERFLOW; 1050 1051 if ( RT_SUCCESS(vrc) 1052 && cArgs) 1059 int vrc = VINF_SUCCESS; 1060 if (cArgs) 1053 1061 { 1054 1062 char const **papszArgv = (char const **)RTMemAlloc((cArgs + 1) * sizeof(papszArgv[0])); … … 1068 1076 1069 1077 RTMemFree(papszArgv); 1078 if (RT_FAILURE(vrc)) 1079 return vrc; 1080 1081 /* Note! No returns after this. */ 1070 1082 } 1071 1083 1072 1084 /* Calculate arguments size (in bytes). */ 1073 size_t cbArgs = 0; 1074 if (RT_SUCCESS(vrc)) 1075 cbArgs = pszArgs ? strlen(pszArgs) + 1 : 0; /* Include terminating zero. */ 1085 size_t cbArgs = pszArgs ? strlen(pszArgs) + 1 : 0; /* Include terminating zero. */ 1076 1086 1077 1087 /* Prepare environment. The guest service dislikes the empty string at the end, so drop it. */ 1078 1088 size_t cbEnvBlock; 1079 1089 char *pszzEnvBlock; 1080 if (RT_SUCCESS(vrc)) 1081 vrc = mData.mProcess.mEnvironmentChanges.queryUtf8Block(&pszzEnvBlock, &cbEnvBlock); 1090 vrc = mData.mProcess.mEnvironmentChanges.queryUtf8Block(&pszzEnvBlock, &cbEnvBlock); 1082 1091 if (RT_SUCCESS(vrc)) 1083 1092 { … … 1124 1133 } 1125 1134 1126 alock.release(); /* Drop the write lock before sending. */1135 rLock.release(); /* Drop the write lock before sending. */ 1127 1136 1128 1137 vrc = sendCommand(HOST_EXEC_CMD, i, paParms); … … 1136 1145 } 1137 1146 1138 if (pszArgs) 1139 RTStrFree(pszArgs); 1147 RTStrFree(pszArgs); 1140 1148 1141 1149 if (RT_SUCCESS(vrc)) 1142 vrc = i_waitForStatusChange(pEvent, uTimeoutMS,1150 vrc = i_waitForStatusChange(pEvent, cMsTimeout, 1143 1151 NULL /* Process status */, pGuestRc); 1144 unregisterWaitEvent(pEvent);1145 1146 LogFlowFuncLeaveRC(vrc);1147 1152 return vrc; 1148 1153 } … … 1327 1332 case ProcessStatus_Undefined: 1328 1333 case ProcessStatus_Starting: 1334 case ProcessStatus_Terminating: 1335 case ProcessStatus_Paused: 1329 1336 /* No result available yet, leave wait 1330 1337 * flags untouched. */
Note:
See TracChangeset
for help on using the changeset viewer.