Changeset 100538 in vbox for trunk/src/VBox
- Timestamp:
- Jul 12, 2023 8:53:20 AM (20 months ago)
- svn:sync-xref-src-repo-rev:
- 158349
- Location:
- trunk/src/VBox/GuestHost/SharedClipboard
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/SharedClipboard/ClipboardDataObjectImpl-win.cpp
r100512 r100538 465 465 */ 466 466 /* static */ 467 DECLCALLBACK(int) SharedClipboardWinDataObject::readThread( RTTHREAD ThreadSelf, void *pvUser)468 { 469 RT_NOREF( ThreadSelf);467 DECLCALLBACK(int) SharedClipboardWinDataObject::readThread(PSHCLTRANSFER pTransfer, void *pvUser) 468 { 469 RT_NOREF(pTransfer); 470 470 471 471 LogFlowFuncEnter(); 472 472 473 473 SharedClipboardWinDataObject *pThis = (SharedClipboardWinDataObject *)pvUser; 474 475 PSHCLTRANSFER pTransfer = pThis->m_pTransfer;476 AssertPtr(pTransfer);477 478 pTransfer->Thread.fStarted = true;479 pTransfer->Thread.fStop = false;480 481 RTThreadUserSignal(RTThreadSelf());482 474 483 475 LogRel2(("Shared Clipboard: Calculating transfer ...\n")); -
trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers.cpp
r100522 r100538 54 54 static void shClTransferSetCallbacks(PSHCLTRANSFER pTransfer, PSHCLTRANSFERCALLBACKS pCallbacks); 55 55 static int shClTransferSetStatus(PSHCLTRANSFER pTransfer, SHCLTRANSFERSTATUS enmStatus); 56 static int shClTransferThreadCreate(PSHCLTRANSFER pTransfer, PFN RTTHREAD pfnThreadFunc, void *pvUser);56 static int shClTransferThreadCreate(PSHCLTRANSFER pTransfer, PFNSHCLTRANSFERTHREAD pfnThreadFunc, void *pvUser); 57 57 static int shClTransferThreadDestroy(PSHCLTRANSFER pTransfer, RTMSINTERVAL uTimeoutMs); 58 58 … … 2111 2111 * @param pvUser Pointer to user-provided data. Optional. 2112 2112 */ 2113 int ShClTransferRun(PSHCLTRANSFER pTransfer, PFN RTTHREAD pfnThreadFunc, void *pvUser)2113 int ShClTransferRun(PSHCLTRANSFER pTransfer, PFNSHCLTRANSFERTHREAD pfnThreadFunc, void *pvUser) 2114 2114 { 2115 2115 AssertPtrReturn(pTransfer, VERR_INVALID_POINTER); … … 2161 2161 2162 2162 /** 2163 * Internal struct for keeping a transfer thread context. 2164 */ 2165 typedef struct _SHCLTRANSFERTHREADCTX 2166 { 2167 /** Pointer to transfer. */ 2168 PSHCLTRANSFER pTransfer; 2169 /** User-supplied context data. Can be NULL if not being used. */ 2170 void *pvUser; 2171 /** Pointer to thread function to use. */ 2172 PFNSHCLTRANSFERTHREAD pfnThread; 2173 } SHCLTRANSFERTHREADCTX; 2174 /** Pointer to internal struct for keeping a transfer thread context. */ 2175 typedef SHCLTRANSFERTHREADCTX *PSHCLTRANSFERTHREADCTX; 2176 2177 /** 2178 * Worker thread for a transfer. 2179 * 2180 * @returns VBox status code. 2181 * @param ThreadSelf Thread self handle. Not being used. 2182 * @param pvUser Context data of type PSHCLTRANSFERTHREADCTX. 2183 */ 2184 static DECLCALLBACK(int) shClTransferThreadWorker(RTTHREAD ThreadSelf, void *pvUser) 2185 { 2186 RT_NOREF(ThreadSelf); 2187 2188 LogFlowFuncEnter(); 2189 2190 PSHCLTRANSFERTHREADCTX pCtx = (PSHCLTRANSFERTHREADCTX)pvUser; 2191 PSHCLTRANSFER pTransfer = pCtx->pTransfer; 2192 2193 shClTransferLock(pTransfer); 2194 2195 pTransfer->Thread.fStarted = true; 2196 pTransfer->Thread.fStop = false; 2197 2198 shClTransferUnlock(pTransfer); 2199 2200 RTThreadUserSignal(RTThreadSelf()); 2201 2202 int rc = pCtx->pfnThread(pTransfer, pCtx->pvUser); 2203 2204 if (pTransfer->Callbacks.pfnOnCompleted) 2205 pTransfer->Callbacks.pfnOnCompleted(&pTransfer->CallbackCtx, rc); 2206 2207 LogFlowFuncLeaveRC(rc); 2208 return rc; 2209 } 2210 2211 /** 2163 2212 * Creates a thread for a clipboard transfer. 2164 2213 * … … 2168 2217 * @param pvUser Pointer to user-provided data. 2169 2218 */ 2170 static int shClTransferThreadCreate(PSHCLTRANSFER pTransfer, PFN RTTHREAD pfnThreadFunc, void *pvUser)2219 static int shClTransferThreadCreate(PSHCLTRANSFER pTransfer, PFNSHCLTRANSFERTHREAD pfnThreadFunc, void *pvUser) 2171 2220 2172 2221 { … … 2182 2231 ("Transfer thread already started"), VERR_WRONG_ORDER); 2183 2232 2233 SHCLTRANSFERTHREADCTX Ctx = { pTransfer, pvUser, pfnThreadFunc }; 2234 2184 2235 /* Spawn a worker thread, so that we don't block the window thread for too long. */ 2185 int rc = RTThreadCreate(&pTransfer->Thread.hThread, pfnThreadFunc,2186 pvUser, 0, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE,2236 int rc = RTThreadCreate(&pTransfer->Thread.hThread, shClTransferThreadWorker, 2237 &Ctx, 0, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, 2187 2238 "shclptx"); 2188 2239 if (RT_SUCCESS(rc)) … … 2214 2265 * @returns VBox status code. 2215 2266 * @param pTransfer Clipboard transfer to destroy thread for. 2216 * @param uTimeoutMs Timeout (in ms) to wait for thread creation.2267 * @param uTimeoutMs Timeout (in ms) to wait for thread destruction. 2217 2268 */ 2218 2269 static int shClTransferThreadDestroy(PSHCLTRANSFER pTransfer, RTMSINTERVAL uTimeoutMs) … … 2235 2286 shClTransferUnlock(pTransfer); /* Leave lock while waiting. */ 2236 2287 2237 int rcThread = VERR_ WRONG_ORDER;2288 int rcThread = VERR_IPE_UNINITIALIZED_STATUS; 2238 2289 int rc = RTThreadWait(pTransfer->Thread.hThread, uTimeoutMs, &rcThread); 2239 2290
Note:
See TracChangeset
for help on using the changeset viewer.