Changeset 105635 in vbox for trunk/src/VBox/HostServices
- Timestamp:
- Aug 9, 2024 9:38:27 AM (9 months ago)
- svn:sync-xref-src-repo-rev:
- 164324
- Location:
- trunk/src/VBox/HostServices/SharedClipboard
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h
r103630 r105635 73 73 typedef SHCLCLIENTMSG *PSHCLCLIENTMSG; 74 74 75 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 75 76 typedef struct SHCLCLIENTTRANSFERSTATE 76 77 { … … 78 79 SHCLTRANSFERDIR enmTransferDir; 79 80 } SHCLCLIENTTRANSFERSTATE, *PSHCLCLIENTTRANSFERSTATE; 81 #endif 80 82 81 83 /** … … 169 171 /** POD (plain old data) state. */ 170 172 SHCLCLIENTPODSTATE POD; 173 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 171 174 /** The client's transfers state. */ 172 175 SHCLCLIENTTRANSFERSTATE Transfers; 176 #endif 173 177 } SHCLCLIENTSTATE, *PSHCLCLIENTSTATE; 174 178 … … 288 292 extern SHCLEXTSTATE g_ExtState; 289 293 290 void shClSvcMsgQueueReset(PSHCLCLIENT pClient); 291 PSHCLCLIENTMSG shClSvcMsgAlloc(PSHCLCLIENT pClient, uint32_t uMsg, uint32_t cParms); 292 void shClSvcMsgFree(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg); 293 void shClSvcMsgAdd(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg, bool fAppend); 294 int shClSvcMsgAddAndWakeupClient(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg); 295 296 int shClSvcClientInit(PSHCLCLIENT pClient, uint32_t uClientID); 297 void shClSvcClientDestroy(PSHCLCLIENT pClient); 298 void shClSvcClientLock(PSHCLCLIENT pClient); 299 void shClSvcClientUnlock(PSHCLCLIENT pClient); 300 void shClSvcClientReset(PSHCLCLIENT pClient); 301 302 int shClSvcClientStateInit(PSHCLCLIENTSTATE pClientState, uint32_t uClientID); 303 int shClSvcClientStateDestroy(PSHCLCLIENTSTATE pClientState); 304 void shclSvcClientStateReset(PSHCLCLIENTSTATE pClientState); 305 306 int shClSvcClientWakeup(PSHCLCLIENT pClient); 294 /** @name Service client functions. 295 * @{ 296 */ 297 PSHCLCLIENTMSG ShClSvcClientMsgAlloc(PSHCLCLIENT pClient, uint32_t uMsg, uint32_t cParms); 298 void ShClSvcClientMsgFree(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg); 299 void ShClSvcClientMsgAdd(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg, bool fAppend); 300 301 int ShClSvcClientInit(PSHCLCLIENT pClient, uint32_t uClientID); /* For testcases. */ 302 303 void ShClSvcClientLock(PSHCLCLIENT pClient); 304 void ShClSvcClientUnlock(PSHCLCLIENT pClient); 305 306 int ShClSvcClientWakeup(PSHCLCLIENT pClient); 307 /** @} */ 307 308 308 309 /** @name Service functions, accessible by the backends. -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
r104472 r105635 104 104 int rc; 105 105 106 PSHCLCLIENTMSG pMsgHdr = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_HDR_READ,107 VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ_REQ);106 PSHCLCLIENTMSG pMsgHdr = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_HDR_READ, 107 VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ_REQ); 108 108 if (pMsgHdr) 109 109 { … … 116 116 HGCMSvcSetU32(&pMsgHdr->aParms[1], 0 /* fRoots */); 117 117 118 shClSvcClientLock(pClient);119 120 shClSvcMsgAdd(pClient, pMsgHdr, true /* fAppend */);121 rc = shClSvcClientWakeup(pClient);122 123 shClSvcClientUnlock(pClient);118 ShClSvcClientLock(pClient); 119 120 ShClSvcClientMsgAdd(pClient, pMsgHdr, true /* fAppend */); 121 rc = ShClSvcClientWakeup(pClient); 122 123 ShClSvcClientUnlock(pClient); 124 124 125 125 /* Remove event from list if caller did not request event handle or in case … … 136 136 else 137 137 { 138 shClSvcMsgFree(pClient, pMsgHdr);138 ShClSvcClientMsgFree(pClient, pMsgHdr); 139 139 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 140 140 } … … 200 200 LogFlowFuncEnter(); 201 201 202 PSHCLCLIENTMSG pMsgEntry = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_ENTRY_READ, 203 VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ_REQ); 204 202 PSHCLCLIENTMSG pMsgEntry = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_ENTRY_READ, 203 VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ_REQ); 205 204 PSHCLEVENT pEvent; 206 205 int rc = ShClEventSourceGenerateAndRegisterEvent(&pTransfer->Events, &pEvent); … … 212 211 HGCMSvcSetU64(&pMsgEntry->aParms[2], idxEntry /* uIndex */); 213 212 214 shClSvcClientLock(pClient);215 216 shClSvcMsgAdd(pClient, pMsgEntry, true /* fAppend */);217 rc = shClSvcClientWakeup(pClient);218 219 shClSvcClientUnlock(pClient);213 ShClSvcClientLock(pClient); 214 215 ShClSvcClientMsgAdd(pClient, pMsgEntry, true /* fAppend */); 216 rc = ShClSvcClientWakeup(pClient); 217 218 ShClSvcClientUnlock(pClient); 220 219 221 220 /* Remove event from list if caller did not request event handle or in case … … 317 316 int rc; 318 317 319 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_OPEN,320 VBOX_SHCL_CPARMS_LIST_OPEN);318 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_OPEN, 319 VBOX_SHCL_CPARMS_LIST_OPEN); 321 320 if (pMsg) 322 321 { … … 333 332 if (RT_SUCCESS(rc)) 334 333 { 335 shClSvcClientLock(pClient);336 337 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);338 rc = shClSvcClientWakeup(pClient);339 340 shClSvcClientUnlock(pClient);334 ShClSvcClientLock(pClient); 335 336 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 337 rc = ShClSvcClientWakeup(pClient); 338 339 ShClSvcClientUnlock(pClient); 341 340 342 341 if (RT_SUCCESS(rc)) … … 369 368 else 370 369 { 371 shClSvcMsgFree(pClient, pMsg);370 ShClSvcClientMsgFree(pClient, pMsg); 372 371 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 373 372 } … … 390 389 int rc; 391 390 392 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_CLOSE,393 VBOX_SHCL_CPARMS_LIST_CLOSE);391 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_CLOSE, 392 VBOX_SHCL_CPARMS_LIST_CLOSE); 394 393 if (pMsg) 395 394 { … … 404 403 if (RT_SUCCESS(rc)) 405 404 { 406 shClSvcClientLock(pClient);407 408 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);409 rc = shClSvcClientWakeup(pClient);410 411 shClSvcClientUnlock(pClient);405 ShClSvcClientLock(pClient); 406 407 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 408 rc = ShClSvcClientWakeup(pClient); 409 410 ShClSvcClientUnlock(pClient); 412 411 413 412 if (RT_SUCCESS(rc)) … … 429 428 else 430 429 { 431 shClSvcMsgFree(pClient, pMsg);430 ShClSvcClientMsgFree(pClient, pMsg); 432 431 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 433 432 } … … 451 450 int rc; 452 451 453 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_HDR_READ,454 VBOX_SHCL_CPARMS_LIST_HDR_READ_REQ);452 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_HDR_READ, 453 VBOX_SHCL_CPARMS_LIST_HDR_READ_REQ); 455 454 if (pMsg) 456 455 { … … 464 463 HGCMSvcSetU32(&pMsg->aParms[2], 0 /* fFlags */); 465 464 466 shClSvcClientLock(pClient);467 468 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);469 rc = shClSvcClientWakeup(pClient);470 471 shClSvcClientUnlock(pClient);465 ShClSvcClientLock(pClient); 466 467 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 468 rc = ShClSvcClientWakeup(pClient); 469 470 ShClSvcClientUnlock(pClient); 472 471 473 472 if (RT_SUCCESS(rc)) … … 492 491 else 493 492 { 494 shClSvcMsgFree(pClient, pMsg);493 ShClSvcClientMsgFree(pClient, pMsg); 495 494 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 496 495 } … … 514 513 int rc; 515 514 516 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_READ,517 VBOX_SHCL_CPARMS_LIST_ENTRY_READ);515 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_READ, 516 VBOX_SHCL_CPARMS_LIST_ENTRY_READ); 518 517 if (pMsg) 519 518 { … … 527 526 HGCMSvcSetU32(&pMsg->aParms[2], 0 /* fInfo */); 528 527 529 shClSvcClientLock(pClient);530 531 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);532 rc = shClSvcClientWakeup(pClient);533 534 shClSvcClientUnlock(pClient);528 ShClSvcClientLock(pClient); 529 530 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 531 rc = ShClSvcClientWakeup(pClient); 532 533 ShClSvcClientUnlock(pClient); 535 534 536 535 if (RT_SUCCESS(rc)) … … 555 554 else 556 555 { 557 shClSvcMsgFree(pClient, pMsg);556 ShClSvcClientMsgFree(pClient, pMsg); 558 557 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 559 558 } … … 576 575 int rc; 577 576 578 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_OPEN,579 VBOX_SHCL_CPARMS_OBJ_OPEN);577 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_OPEN, 578 VBOX_SHCL_CPARMS_OBJ_OPEN); 580 579 if (pMsg) 581 580 { … … 597 596 HGCMSvcSetU32(&pMsg->aParms[3], pCreateParms->fCreate); 598 597 599 shClSvcClientLock(pClient);600 601 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);602 rc = shClSvcClientWakeup(pClient);603 604 shClSvcClientUnlock(pClient);598 ShClSvcClientLock(pClient); 599 600 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 601 rc = ShClSvcClientWakeup(pClient); 602 603 ShClSvcClientUnlock(pClient); 605 604 606 605 if (RT_SUCCESS(rc)) … … 633 632 else 634 633 { 635 shClSvcMsgFree(pClient, pMsg);634 ShClSvcClientMsgFree(pClient, pMsg); 636 635 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 637 636 } … … 654 653 int rc; 655 654 656 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_CLOSE,657 VBOX_SHCL_CPARMS_OBJ_CLOSE);655 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_CLOSE, 656 VBOX_SHCL_CPARMS_OBJ_CLOSE); 658 657 if (pMsg) 659 658 { … … 666 665 HGCMSvcSetU64(&pMsg->aParms[1], hObj); 667 666 668 shClSvcClientLock(pClient);669 670 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);671 rc = shClSvcClientWakeup(pClient);672 673 shClSvcClientUnlock(pClient);667 ShClSvcClientLock(pClient); 668 669 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 670 rc = ShClSvcClientWakeup(pClient); 671 672 ShClSvcClientUnlock(pClient); 674 673 675 674 if (RT_SUCCESS(rc)) … … 699 698 else 700 699 { 701 shClSvcMsgFree(pClient, pMsg);700 ShClSvcClientMsgFree(pClient, pMsg); 702 701 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 703 702 } … … 721 720 int rc; 722 721 723 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_READ,724 VBOX_SHCL_CPARMS_OBJ_READ_REQ);722 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_READ, 723 VBOX_SHCL_CPARMS_OBJ_READ_REQ); 725 724 if (pMsg) 726 725 { … … 735 734 HGCMSvcSetU32(&pMsg->aParms[3], fFlags); 736 735 737 shClSvcClientLock(pClient);738 739 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);740 rc = shClSvcClientWakeup(pClient);741 742 shClSvcClientUnlock(pClient);736 ShClSvcClientLock(pClient); 737 738 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 739 rc = ShClSvcClientWakeup(pClient); 740 741 ShClSvcClientUnlock(pClient); 743 742 744 743 if (RT_SUCCESS(rc)) … … 771 770 else 772 771 { 773 shClSvcMsgFree(pClient, pMsg);772 ShClSvcClientMsgFree(pClient, pMsg); 774 773 rc = VERR_SHCLPB_MAX_EVENTS_REACHED; 775 774 } … … 1384 1383 if (RT_SUCCESS(rc)) 1385 1384 { 1386 shClSvcClientLock(pClient);1385 ShClSvcClientLock(pClient); 1387 1386 1388 1387 rc = shClSvcTransferSendStatusAsync(pClient, pTransfer, 1389 1388 SHCLTRANSFERSTATUS_REQUESTED, VINF_SUCCESS, 1390 1389 NULL); 1391 shClSvcClientUnlock(pClient);1390 ShClSvcClientUnlock(pClient); 1392 1391 } 1393 1392 } … … 2010 2009 && pTransfer) 2011 2010 { 2012 shClSvcClientLock(pClient);2011 ShClSvcClientLock(pClient); 2013 2012 2014 2013 /* Let the guest know. */ … … 2017 2016 AssertRC(rc2); 2018 2017 2019 shClSvcClientUnlock(pClient);2018 ShClSvcClientUnlock(pClient); 2020 2019 2021 2020 ShClSvcTransferDestroy(pClient, pTransfer); … … 2100 2099 Assert(RTCritSectIsOwner(&pClient->CritSect)); 2101 2100 2102 PSHCLCLIENTMSG pMsgReadData = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_STATUS,2103 VBOX_SHCL_CPARMS_TRANSFER_STATUS);2101 PSHCLCLIENTMSG pMsgReadData = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_TRANSFER_STATUS, 2102 VBOX_SHCL_CPARMS_TRANSFER_STATUS); 2104 2103 if (!pMsgReadData) 2105 2104 return VERR_NO_MEMORY; … … 2115 2114 HGCMSvcSetU32(&pMsgReadData->aParms[4], 0 /* fFlags, unused */); 2116 2115 2117 shClSvcMsgAdd(pClient, pMsgReadData, true /* fAppend */);2118 2119 rc = shClSvcClientWakeup(pClient);2116 ShClSvcClientMsgAdd(pClient, pMsgReadData, true /* fAppend */); 2117 2118 rc = ShClSvcClientWakeup(pClient); 2120 2119 if (RT_SUCCESS(rc)) 2121 2120 { … … 2235 2234 LogFlowFuncEnter(); 2236 2235 2237 shClSvcClientLock(pClient);2236 ShClSvcClientLock(pClient); 2238 2237 2239 2238 /* When creating a new transfer, this is a good time to clean up old stuff we don't need anymore. */ … … 2255 2254 } 2256 2255 2257 shClSvcClientUnlock(pClient);2256 ShClSvcClientUnlock(pClient); 2258 2257 2259 2258 if (RT_FAILURE(rc)) … … 2281 2280 LogFlowFuncEnter(); 2282 2281 2283 shClSvcClientLock(pClient);2282 ShClSvcClientLock(pClient); 2284 2283 2285 2284 PSHCLTRANSFERCTX pTxCtx = &pClient->Transfers.Ctx; … … 2295 2294 pTransfer = NULL; 2296 2295 2297 shClSvcClientUnlock(pClient);2296 ShClSvcClientUnlock(pClient); 2298 2297 2299 2298 LogFlowFuncLeave(); … … 2313 2312 LogFlowFuncEnter(); 2314 2313 2315 shClSvcClientLock(pClient);2314 ShClSvcClientLock(pClient); 2316 2315 2317 2316 Assert(ShClTransferGetStatus(pTransfer) == SHCLTRANSFERSTATUS_NONE); … … 2344 2343 LogRel(("Shared Clipboard: Initializing transfer failed with %Rrc\n", rc)); 2345 2344 2346 shClSvcClientUnlock(pClient);2345 ShClSvcClientUnlock(pClient); 2347 2346 2348 2347 LogFlowFuncLeaveRC(rc); … … 2361 2360 LogRel2(("Shared Clipboard: Starting transfer %RU16 ...\n", pTransfer->State.uID)); 2362 2361 2363 shClSvcClientLock(pClient);2362 ShClSvcClientLock(pClient); 2364 2363 2365 2364 int rc = ShClTransferStart(pTransfer); … … 2368 2367 * (so that it can tear down the transfer on error as well). */ 2369 2368 int rc2 = shClSvcTransferSendStatusAsync(pClient, pTransfer, 2370 RT_SUCCESS(rc)2371 ? SHCLTRANSFERSTATUS_STARTED : SHCLTRANSFERSTATUS_ERROR, rc,2372 NULL /* ppEvent */);2369 RT_SUCCESS(rc) 2370 ? SHCLTRANSFERSTATUS_STARTED : SHCLTRANSFERSTATUS_ERROR, rc, 2371 NULL /* ppEvent */); 2373 2372 if (RT_SUCCESS(rc)) 2374 2373 rc = rc2; 2375 2374 2376 shClSvcClientUnlock(pClient);2375 ShClSvcClientUnlock(pClient); 2377 2376 return rc; 2378 2377 } … … 2390 2389 LogRel2(("Shared Clipboard: Stopping transfer %RU16 ...\n", pTransfer->State.uID)); 2391 2390 2392 shClSvcClientLock(pClient);2391 ShClSvcClientLock(pClient); 2393 2392 2394 2393 PSHCLEVENT pEvent; … … 2400 2399 LogRel2(("Shared Clipboard: Waiting for stop of transfer %RU16 on guest ...\n", pTransfer->State.uID)); 2401 2400 2402 shClSvcClientUnlock(pClient);2401 ShClSvcClientUnlock(pClient); 2403 2402 2404 2403 rc = ShClEventWait(pEvent, pTransfer->uTimeoutMs, NULL /* ppPayload */); … … 2408 2407 ShClEventRelease(pEvent); 2409 2408 2410 shClSvcClientLock(pClient);2409 ShClSvcClientLock(pClient); 2411 2410 } 2412 2411 … … 2415 2414 pTransfer->State.uID, rc)); 2416 2415 2417 shClSvcClientUnlock(pClient);2416 ShClSvcClientUnlock(pClient); 2418 2417 2419 2418 LogFlowFuncLeaveRC(rc); -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
r105634 r105635 303 303 304 304 305 /********************************************************************************************************************************* 306 * Prototypes * 307 *********************************************************************************************************************************/ 308 static void shClSvcClientReset(PSHCLCLIENT pClient); 309 static void shClSvcClientDestroy(PSHCLCLIENT pClient); 310 311 static void shClSvcClientMsgQueueReset(PSHCLCLIENT pClient); 312 static int shClSvcClientMsgAddAndWakeupClient(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg); 313 314 static int shClSvcClientStateInit(PSHCLCLIENTSTATE pState, uint32_t uClientID); 315 static int shClSvcClientStateDestroy(PSHCLCLIENTSTATE pState); 316 static void shclSvcClientStateReset(PSHCLCLIENTSTATE pState); 317 318 305 319 /** 306 320 * Returns the current Shared Clipboard service mode. … … 389 403 * @note Caller enters pClient->CritSect. 390 404 */ 391 void shClSvcMsgQueueReset(PSHCLCLIENT pClient)405 static void shClSvcClientMsgQueueReset(PSHCLCLIENT pClient) 392 406 { 393 407 Assert(RTCritSectIsOwner(&pClient->CritSect)); … … 397 411 { 398 412 PSHCLCLIENTMSG pMsg = RTListRemoveFirst(&pClient->MsgQueue, SHCLCLIENTMSG, ListEntry); 399 shClSvcMsgFree(pClient, pMsg);413 ShClSvcClientMsgFree(pClient, pMsg); 400 414 } 401 415 pClient->cMsgAllocated = 0; … … 417 431 * @param cParms The number of parameters the message takes. 418 432 */ 419 PSHCLCLIENTMSG shClSvcMsgAlloc(PSHCLCLIENT pClient, uint32_t idMsg, uint32_t cParms)433 PSHCLCLIENTMSG ShClSvcClientMsgAlloc(PSHCLCLIENT pClient, uint32_t idMsg, uint32_t cParms) 420 434 { 421 435 RT_NOREF(pClient); … … 439 453 440 454 /** 441 * Frees a formerly allocated cli pboard message.455 * Frees a formerly allocated client clipboard message. 442 456 * 443 457 * @param pClient The client which was the target of this message. 444 458 * @param pMsg Clipboard message to free. 445 459 */ 446 void shClSvcMsgFree(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg)460 void ShClSvcClientMsgFree(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg) 447 461 { 448 462 RT_NOREF(pClient); … … 534 548 * @note Caller must enter critical section. 535 549 */ 536 void shClSvcMsgAdd(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg, bool fAppend)550 void ShClSvcClientMsgAdd(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg, bool fAppend) 537 551 { 538 552 Assert(RTCritSectIsOwner(&pClient->CritSect)); … … 560 574 * @note Caller must enter critical section. 561 575 */ 562 int shClSvc MsgAddAndWakeupClient(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg)576 int shClSvcClientMsgAddAndWakeupClient(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg) 563 577 { 564 578 Assert(RTCritSectIsOwner(&pClient->CritSect)); … … 568 582 569 583 RTListAppend(&pClient->MsgQueue, &pMsg->ListEntry); 570 return shClSvcClientWakeup(pClient); /** @todo r=andy Remove message if waking up failed? */584 return ShClSvcClientWakeup(pClient); /** @todo r=andy Remove message if waking up failed? */ 571 585 } 572 586 … … 577 591 * @param uClientID HGCM client ID to assign client to. 578 592 */ 579 int shClSvcClientInit(PSHCLCLIENT pClient, uint32_t uClientID)593 int ShClSvcClientInit(PSHCLCLIENT pClient, uint32_t uClientID) 580 594 { 581 595 AssertPtrReturn(pClient, VERR_INVALID_POINTER); … … 623 637 * @param pClient Client to destroy. 624 638 */ 625 void shClSvcClientDestroy(PSHCLCLIENT pClient)639 static void shClSvcClientDestroy(PSHCLCLIENT pClient) 626 640 { 627 641 AssertPtrReturnVoid(pClient); … … 630 644 631 645 /* Make sure to send a quit message to the guest so that it can terminate gracefully. */ 632 shClSvcClientLock(pClient);646 ShClSvcClientLock(pClient); 633 647 634 648 if (pClient->Pending.uType) … … 651 665 652 666 ShClEventSourceDestroy(&pClient->EventSrc); 653 654 shClSvcClientUnlock(pClient);655 656 667 shClSvcClientStateDestroy(&pClient->State); 668 669 ShClSvcClientUnlock(pClient); 657 670 658 671 PSHCLCLIENTLEGACYCID pCidIter, pCidIterNext; … … 672 685 } 673 686 674 void shClSvcClientLock(PSHCLCLIENT pClient)687 void ShClSvcClientLock(PSHCLCLIENT pClient) 675 688 { 676 689 int rc2 = RTCritSectEnter(&pClient->CritSect); … … 678 691 } 679 692 680 void shClSvcClientUnlock(PSHCLCLIENT pClient)693 void ShClSvcClientUnlock(PSHCLCLIENT pClient) 681 694 { 682 695 int rc2 = RTCritSectLeave(&pClient->CritSect); … … 689 702 * @param pClient Client to reset. 690 703 */ 691 void shClSvcClientReset(PSHCLCLIENT pClient)704 static void shClSvcClientReset(PSHCLCLIENT pClient) 692 705 { 693 706 if (!pClient) … … 698 711 699 712 /* Reset message queue. */ 700 shClSvc MsgQueueReset(pClient);713 shClSvcClientMsgQueueReset(pClient); 701 714 702 715 /* Reset event source. */ … … 970 983 { 971 984 RTListNodeRemove(&pFirstMsg->ListEntry); 972 shClSvcMsgFree(pClient, pFirstMsg);985 ShClSvcClientMsgFree(pClient, pFirstMsg); 973 986 974 987 rc = VINF_HGCM_ASYNC_EXECUTE; /* The caller must not complete it. */ … … 1104 1117 { 1105 1118 RTListNodeRemove(&pFirstMsg->ListEntry); 1106 shClSvcMsgFree(pClient, pFirstMsg);1119 ShClSvcClientMsgFree(pClient, pFirstMsg); 1107 1120 } 1108 1121 … … 1198 1211 * @note Caller must enter critical section. 1199 1212 */ 1200 int shClSvcClientWakeup(PSHCLCLIENT pClient)1213 int ShClSvcClientWakeup(PSHCLCLIENT pClient) 1201 1214 { 1202 1215 Assert(RTCritSectIsOwner(&pClient->CritSect)); … … 1226 1239 { 1227 1240 RTListNodeRemove(&pFirstMsg->ListEntry); 1228 shClSvcMsgFree(pClient, pFirstMsg);1241 ShClSvcClientMsgFree(pClient, pFirstMsg); 1229 1242 } 1230 1243 … … 1293 1306 * Allocate messages, one for each format. 1294 1307 */ 1295 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient,1296 pClient->State.fGuestFeatures0 & VBOX_SHCL_GF_0_CONTEXT_ID1297 ? VBOX_SHCL_HOST_MSG_READ_DATA_CID : VBOX_SHCL_HOST_MSG_READ_DATA,1298 2);1308 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, 1309 pClient->State.fGuestFeatures0 & VBOX_SHCL_GF_0_CONTEXT_ID 1310 ? VBOX_SHCL_HOST_MSG_READ_DATA_CID : VBOX_SHCL_HOST_MSG_READ_DATA, 1311 2); 1299 1312 if (pMsg) 1300 1313 { 1301 shClSvcClientLock(pClient);1314 ShClSvcClientLock(pClient); 1302 1315 1303 1316 PSHCLEVENT pEvent; … … 1342 1355 HGCMSvcSetU32(&pMsg->aParms[1], fFormat); 1343 1356 1344 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);1357 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 1345 1358 /* Wake up the client to let it know that there are new messages. */ 1346 shClSvcClientWakeup(pClient);1359 ShClSvcClientWakeup(pClient); 1347 1360 1348 1361 /* Return event to caller. */ … … 1364 1377 1365 1378 if (RT_FAILURE(rc)) 1366 shClSvcMsgFree(pClient, pMsg);1367 1368 shClSvcClientUnlock(pClient);1379 ShClSvcClientMsgFree(pClient, pMsg); 1380 1381 ShClSvcClientUnlock(pClient); 1369 1382 } 1370 1383 else … … 1614 1627 * Allocate a message, populate parameters and post it to the client. 1615 1628 */ 1616 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_FORMATS_REPORT, 2);1629 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, VBOX_SHCL_HOST_MSG_FORMATS_REPORT, 2); 1617 1630 if (pMsg) 1618 1631 { … … 1620 1633 HGCMSvcSetU32(&pMsg->aParms[1], fFormats); 1621 1634 1622 shClSvcClientLock(pClient);1623 1624 rc = shClSvc MsgAddAndWakeupClient(pClient, pMsg);1625 1626 shClSvcClientUnlock(pClient);1635 ShClSvcClientLock(pClient); 1636 1637 rc = shClSvcClientMsgAddAndWakeupClient(pClient, pMsg); 1638 1639 ShClSvcClientUnlock(pClient); 1627 1640 } 1628 1641 else … … 2163 2176 AssertPtr(pvClient); 2164 2177 2165 int rc = shClSvcClientInit(pClient, u32ClientID);2178 int rc = ShClSvcClientInit(pClient, u32ClientID); 2166 2179 if (RT_SUCCESS(rc)) 2167 2180 { … … 2319 2332 LogRel(("Shared Clipboard: Error reported from guest side: %Rrc\n", rcGuest)); 2320 2333 2321 shClSvcClientLock(pClient); 2322 2323 /* Reset message queue. */ 2324 shClSvcMsgQueueReset(pClient); 2325 2326 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 2327 /* Reset transfer state. */ 2328 shClSvcTransferDestroyAll(pClient); 2329 #endif 2330 shClSvcClientUnlock(pClient); 2334 /* Start over. */ 2335 shClSvcClientReset(pClient); 2331 2336 } 2332 2337 break; … … 2370 2375 * @param uClientID Client ID (HGCM) to use for this client state. 2371 2376 */ 2372 int shClSvcClientStateInit(PSHCLCLIENTSTATE pClientState, uint32_t uClientID)2377 static int shClSvcClientStateInit(PSHCLCLIENTSTATE pClientState, uint32_t uClientID) 2373 2378 { 2374 2379 LogFlowFuncEnter(); … … 2386 2391 * 2387 2392 * @returns VBox status code. 2388 * @param pClientState Client state to destroy. 2389 */ 2390 int shClSvcClientStateDestroy(PSHCLCLIENTSTATE pClientState) 2391 { 2392 RT_NOREF(pClientState); 2393 2393 * @param pState Client state to destroy. 2394 */ 2395 static int shClSvcClientStateDestroy(PSHCLCLIENTSTATE pState) 2396 { 2394 2397 LogFlowFuncEnter(); 2395 2398 2399 shclSvcClientStateReset(pState); 2400 2396 2401 return VINF_SUCCESS; 2397 2402 } … … 2400 2405 * Resets a Shared Clipboard service's client state. 2401 2406 * 2402 * @param p ClientStateClient state to reset.2403 */ 2404 void shclSvcClientStateReset(PSHCLCLIENTSTATE pClientState)2407 * @param pState Client state to reset. 2408 */ 2409 static void shclSvcClientStateReset(PSHCLCLIENTSTATE pState) 2405 2410 { 2406 2411 LogFlowFuncEnter(); 2407 2412 2408 p ClientState->fGuestFeatures0 = VBOX_SHCL_GF_NONE;2409 p ClientState->fGuestFeatures1 = VBOX_SHCL_GF_NONE;2410 2411 p ClientState->cbChunkSize = VBOX_SHCL_DEFAULT_CHUNK_SIZE; /** @todo Make this configurable. */2412 p ClientState->enmSource = SHCLSOURCE_INVALID;2413 p ClientState->fFlags = SHCLCLIENTSTATE_FLAGS_NONE;2414 2415 p ClientState->POD.enmDir = SHCLTRANSFERDIR_UNKNOWN;2416 p ClientState->POD.uFormat = VBOX_SHCL_FMT_NONE;2417 p ClientState->POD.cbToReadWriteTotal = 0;2418 p ClientState->POD.cbReadWritten = 0;2413 pState->fGuestFeatures0 = VBOX_SHCL_GF_NONE; 2414 pState->fGuestFeatures1 = VBOX_SHCL_GF_NONE; 2415 2416 pState->cbChunkSize = VBOX_SHCL_DEFAULT_CHUNK_SIZE; /** @todo Make this configurable. */ 2417 pState->enmSource = SHCLSOURCE_INVALID; 2418 pState->fFlags = SHCLCLIENTSTATE_FLAGS_NONE; 2419 2420 pState->POD.enmDir = SHCLTRANSFERDIR_UNKNOWN; 2421 pState->POD.uFormat = VBOX_SHCL_FMT_NONE; 2422 pState->POD.cbToReadWriteTotal = 0; 2423 pState->POD.cbReadWritten = 0; 2419 2424 2420 2425 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 2421 p ClientState->Transfers.enmTransferDir = SHCLTRANSFERDIR_UNKNOWN;2426 pState->Transfers.enmTransferDir = SHCLTRANSFERDIR_UNKNOWN; 2422 2427 #endif 2423 2428 } … … 2750 2755 VERR_SSM_DATA_UNIT_FORMAT_CHANGED); 2751 2756 2752 PSHCLCLIENTMSG pMsg = shClSvcMsgAlloc(pClient, u.Msg.idMsg, u.Msg.cParms);2757 PSHCLCLIENTMSG pMsg = ShClSvcClientMsgAlloc(pClient, u.Msg.idMsg, u.Msg.cParms); 2753 2758 AssertReturn(pMsg, VERR_NO_MEMORY); 2754 2759 pMsg->idCtx = u.Msg.idCtx; … … 2757 2762 { 2758 2763 rc = HGCMSvcSSMR3Get(&pMsg->aParms[p], pSSM, pVMM); 2759 AssertRCReturnStmt(rc, shClSvcMsgFree(pClient, pMsg), rc);2764 AssertRCReturnStmt(rc, ShClSvcClientMsgFree(pClient, pMsg), rc); 2760 2765 } 2761 2766 2762 2767 RTCritSectEnter(&pClient->CritSect); 2763 shClSvcMsgAdd(pClient, pMsg, true /* fAppend */);2768 ShClSvcClientMsgAdd(pClient, pMsg, true /* fAppend */); 2764 2769 RTCritSectLeave(&pClient->CritSect); 2765 2770 } -
trunk/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceImpl.cpp
r103631 r105635 89 89 rc = table.pfnHostCall(NULL, VBOX_SHCL_HOST_FN_SET_MODE, 1, parms); 90 90 RTTESTI_CHECK_RC_OK(rc); 91 rc = shClSvcClientInit(&g_Client, 1 /* clientId */);91 rc = ShClSvcClientInit(&g_Client, 1 /* clientId */); 92 92 RTTESTI_CHECK_RC_OK(rc); 93 93
Note:
See TracChangeset
for help on using the changeset viewer.