Changeset 86908 in vbox for trunk/src/VBox/Main
- Timestamp:
- Nov 18, 2020 10:56:12 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 141388
- Location:
- trunk/src/VBox/Main
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/Makefile.kmk
r86753 r86908 726 726 endif 727 727 728 ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS729 VBoxSVC_SOURCES += $(PATH_ROOT)/src/VBox/GuestHost/SharedClipboard/ClipboardArea.cpp730 endif731 732 728 $(call KB_FN_DO_PASS0_ON_TARGET,VBoxSVC) # Sets VBoxSVC_0_OUTDIR 733 729 -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r86752 r86908 4928 4928 <interface 4929 4929 name="IInternalMachineControl" extends="$unknown" 4930 uuid=" 0075FD6C-00C2-4484-0077-C057003D9C90"4930 uuid="EA05E40C-CB31-423B-B3B7-A5B19300F40C" 4931 4931 internal="yes" 4932 4932 wsmap="suppress" … … 5127 5127 The flags of the properties returned. The array entries match the 5128 5128 corresponding entries in the @a name array. 5129 </desc>5130 </param>5131 </method>5132 <method name="clipboardAreaRegister">5133 <desc>5134 Registers a new clipboard area.5135 </desc>5136 <param name="parms" type="wstring" dir="in" safearray="yes">5137 <desc>5138 Registration parameters. Currently not used and therefore ignored.5139 </desc>5140 </param>5141 <param name="id" type="unsigned long" dir="out">5142 <desc>5143 Returns the new clipboard area which got registered.5144 </desc>5145 </param>5146 </method>5147 <method name="clipboardAreaUnregister">5148 <desc>5149 Unregisters a formerly registered clipboard area.5150 </desc>5151 <param name="id" type="unsigned long" dir="in">5152 <desc>5153 Clipboard area to unregister.5154 </desc>5155 </param>5156 </method>5157 <method name="clipboardAreaAttach">5158 <desc>5159 Attaches to a registered clipboard area.5160 </desc>5161 <param name="id" type="unsigned long" dir="in">5162 <desc>5163 Clipboard area to attach to.5164 </desc>5165 </param>5166 </method>5167 <method name="clipboardAreaDetach">5168 <desc>5169 Detaches from a registered clipboard area.5170 </desc>5171 <param name="id" type="unsigned long" dir="in">5172 <desc>5173 Clipboard area to detach from.5174 </desc>5175 </param>5176 </method>5177 <method name="clipboardAreaGetMostRecent">5178 <desc>5179 Returns the most recent (last registered) clipboard area.5180 </desc>5181 <param name="id" type="unsigned long" dir="out">5182 <desc>5183 Returns the most recent clipboard area.5184 </desc>5185 </param>5186 </method>5187 <method name="clipboardAreaGetRefCount">5188 <desc>5189 Returns the current reference count of a clipboard area.5190 </desc>5191 <param name="id" type="unsigned long" dir="in">5192 <desc>5193 Clipboard area to return reference count for.5194 </desc>5195 </param>5196 <param name="refcount" type="unsigned long" dir="out">5197 <desc>5198 Returns the current reference count.5199 5129 </desc> 5200 5130 </param> -
trunk/src/VBox/Main/include/MachineImpl.h
r85769 r86908 1215 1215 ComPtr<IProgress> &aProgress); 1216 1216 HRESULT finishOnlineMergeMedium(); 1217 HRESULT clipboardAreaRegister(const std::vector<com::Utf8Str> &aParms, ULONG *aID);1218 HRESULT clipboardAreaUnregister(ULONG aID);1219 HRESULT clipboardAreaAttach(ULONG aID);1220 HRESULT clipboardAreaDetach(ULONG aID);1221 HRESULT clipboardAreaGetMostRecent(ULONG *aID);1222 HRESULT clipboardAreaGetRefCount(ULONG aID, ULONG *aRefCount);1223 1217 HRESULT pullGuestProperties(std::vector<com::Utf8Str> &aNames, 1224 1218 std::vector<com::Utf8Str> &aValues, … … 1377 1371 ComPtr<IProgress> &aProgress); 1378 1372 HRESULT finishOnlineMergeMedium(); 1379 HRESULT clipboardAreaRegister(const std::vector<com::Utf8Str> &aParms, ULONG *aID);1380 HRESULT clipboardAreaUnregister(ULONG aID);1381 HRESULT clipboardAreaAttach(ULONG aID);1382 HRESULT clipboardAreaDetach(ULONG aID);1383 HRESULT clipboardAreaGetMostRecent(ULONG *aID);1384 HRESULT clipboardAreaGetRefCount(ULONG aID, ULONG *aRefCount);1385 1373 HRESULT pullGuestProperties(std::vector<com::Utf8Str> &aNames, 1386 1374 std::vector<com::Utf8Str> &aValues, -
trunk/src/VBox/Main/include/VirtualBoxImpl.h
r86501 r86908 75 75 #endif 76 76 77 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS78 struct SharedClipboardAreaData;79 #endif80 81 77 class ATL_NO_VTABLE VirtualBox : 82 78 public VirtualBoxWrap … … 178 174 void i_onSnapshotRestored(const Guid &aMachineId, const Guid &aSnapshotId); 179 175 void i_onSnapshotChanged(const Guid &aMachineId, const Guid &aSnapshotId); 180 181 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS182 int i_clipboardAreaCreate(ULONG uAreaID, uint32_t fFlags, SharedClipboardAreaData **ppAreaData);183 int i_clipboardAreaDestroy(SharedClipboardAreaData *pAreaData);184 185 HRESULT i_onClipboardAreaRegister(const std::vector<com::Utf8Str> &aParms, ULONG *aID);186 HRESULT i_onClipboardAreaUnregister(ULONG aID);187 HRESULT i_onClipboardAreaAttach(ULONG aID);188 HRESULT i_onClipboardAreaDetach(ULONG aID);189 ULONG i_onClipboardAreaGetMostRecent(void);190 ULONG i_onClipboardAreaGetRefCount(ULONG aID);191 #endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */192 176 193 177 void i_onGuestPropertyChanged(const Guid &aMachineId, const Utf8Str &aName, const Utf8Str &aValue, const Utf8Str &aFlags); -
trunk/src/VBox/Main/src-server/MachineImpl.cpp
r86498 r86908 13376 13376 } 13377 13377 13378 HRESULT SessionMachine::clipboardAreaRegister(const std::vector<com::Utf8Str> &aParms, ULONG *aID)13379 {13380 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS13381 ULONG uID;13382 int rc = mParent->i_onClipboardAreaRegister(aParms, &uID);13383 if (RT_SUCCESS(rc))13384 {13385 if (aID)13386 *aID = uID;13387 return S_OK;13388 }13389 return E_FAIL;13390 #else13391 RT_NOREF(aParms, aID);13392 ReturnComNotImplemented();13393 #endif13394 }13395 13396 HRESULT SessionMachine::clipboardAreaUnregister(ULONG aID)13397 {13398 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS13399 return mParent->i_onClipboardAreaUnregister(aID);13400 #else13401 RT_NOREF(aID);13402 ReturnComNotImplemented();13403 #endif13404 }13405 13406 HRESULT SessionMachine::clipboardAreaAttach(ULONG aID)13407 {13408 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS13409 return mParent->i_onClipboardAreaAttach(aID);13410 #else13411 RT_NOREF(aID);13412 ReturnComNotImplemented();13413 #endif13414 }13415 HRESULT SessionMachine::clipboardAreaDetach(ULONG aID)13416 {13417 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS13418 return mParent->i_onClipboardAreaDetach(aID);13419 #else13420 RT_NOREF(aID);13421 ReturnComNotImplemented();13422 #endif13423 }13424 13425 HRESULT SessionMachine::clipboardAreaGetMostRecent(ULONG *aID)13426 {13427 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS13428 ULONG uID = mParent->i_onClipboardAreaGetMostRecent();13429 if (aID)13430 *aID = uID;13431 return S_OK;13432 #else13433 RT_NOREF(aID);13434 ReturnComNotImplemented();13435 #endif13436 }13437 13438 HRESULT SessionMachine::clipboardAreaGetRefCount(ULONG aID, ULONG *aRefCount)13439 {13440 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS13441 ULONG uRefCount = mParent->i_onClipboardAreaGetRefCount(aID);13442 if (aRefCount)13443 *aRefCount = uRefCount;13444 return S_OK;13445 #else13446 RT_NOREF(aID, aRefCount);13447 ReturnComNotImplemented();13448 #endif13449 }13450 13451 13378 HRESULT SessionMachine::pullGuestProperties(std::vector<com::Utf8Str> &aNames, 13452 13379 std::vector<com::Utf8Str> &aValues, … … 14956 14883 } 14957 14884 14958 HRESULT Machine::clipboardAreaRegister(const std::vector<com::Utf8Str> &aParms, ULONG *aID)14959 {14960 RT_NOREF(aParms, aID);14961 ReturnComNotImplemented();14962 }14963 14964 HRESULT Machine::clipboardAreaUnregister(ULONG aID)14965 {14966 RT_NOREF(aID);14967 ReturnComNotImplemented();14968 }14969 14970 HRESULT Machine::clipboardAreaAttach(ULONG aID)14971 {14972 RT_NOREF(aID);14973 ReturnComNotImplemented();14974 }14975 HRESULT Machine::clipboardAreaDetach(ULONG aID)14976 {14977 RT_NOREF(aID);14978 ReturnComNotImplemented();14979 }14980 14981 HRESULT Machine::clipboardAreaGetMostRecent(ULONG *aID)14982 {14983 RT_NOREF(aID);14984 ReturnComNotImplemented();14985 }14986 14987 HRESULT Machine::clipboardAreaGetRefCount(ULONG aID, ULONG *aRefCount)14988 {14989 RT_NOREF(aID, aRefCount);14990 ReturnComNotImplemented();14991 }14992 14993 14885 HRESULT Machine::pullGuestProperties(std::vector<com::Utf8Str> &aNames, 14994 14886 std::vector<com::Utf8Str> &aValues, -
trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
r86521 r86908 262 262 typedef std::map<Guid, ComObjPtr<Medium> > HardDiskMap; 263 263 264 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS265 /**266 * Structure for keeping Shared Clipboard area data within the VirtualBox object.267 */268 struct SharedClipboardAreaData269 {270 SharedClipboardAreaData()271 : uID(NIL_SHCLAREAID) { }272 273 /** The area's (unique) ID.274 * Set to NIL_SHCLAREAID if not initialized yet. */275 ULONG uID;276 /** The actual Shared Clipboard area assigned to this ID. */277 SharedClipboardArea Area;278 };279 280 /** Map of Shared Clipboard areas. The key defines the area ID. */281 typedef std::map<ULONG, SharedClipboardAreaData *> SharedClipboardAreaMap;282 283 /**284 * Structure for keeping global Shared Clipboard data within the VirtualBox object.285 */286 struct SharedClipboardData287 {288 SharedClipboardData()289 : uMostRecentClipboardAreaID(NIL_SHCLAREAID)290 , uMaxClipboardAreas(32) /** @todo Make this configurable. */291 {292 #ifdef DEBUG_andy293 uMaxClipboardAreas = 9999;294 #endif295 int rc2 = RTCritSectInit(&CritSect);296 AssertRC(rc2);297 }298 299 virtual ~SharedClipboardData()300 {301 RTCritSectDelete(&CritSect);302 }303 304 /**305 * Generates a new clipboard area ID.306 * Currently does *not* check for collisions and stuff.307 *308 * @returns New clipboard area ID.309 */310 ULONG GenerateAreaID(void)311 {312 ULONG uID = NIL_SHCLAREAID;313 314 int rc = RTCritSectEnter(&CritSect);315 if (RT_SUCCESS(rc))316 {317 uID = RTRandU32Ex(1, UINT32_MAX - 1); /** @todo Make this a bit more sophisticated. Later. */318 319 int rc2 = RTCritSectLeave(&CritSect);320 AssertRC(rc2);321 }322 323 LogFlowFunc(("uID=%RU32\n", uID));324 return uID;325 }326 327 /** Critical section to serialize access. */328 RTCRITSECT CritSect;329 /** The most recent (last created) clipboard area ID.330 * NIL_SHCLAREAID if not initialized yet. */331 ULONG uMostRecentClipboardAreaID;332 /** Maximum of concurrent clipboard areas.333 * @todo Make this configurable. */334 ULONG uMaxClipboardAreas;335 /** Map of clipboard areas. The key is the area ID. */336 SharedClipboardAreaMap mapClipboardAreas;337 };338 #endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */339 340 264 /** 341 265 * Main VirtualBox data structure. … … 492 416 bool fWatcherIsReliable; 493 417 #endif 494 495 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS496 /** Data related to Shared Clipboard handling. */497 SharedClipboardData SharedClipboard;498 #endif499 418 }; 500 419 … … 1129 1048 unconst(m->ptrExtPackManager).setNull(); 1130 1049 } 1131 #endif1132 1133 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS1134 LogFlowThisFunc(("Destroying Shared Clipboard areas...\n"));1135 SharedClipboardAreaMap::iterator itArea = m->SharedClipboard.mapClipboardAreas.begin();1136 while (itArea != m->SharedClipboard.mapClipboardAreas.end())1137 {1138 i_clipboardAreaDestroy(itArea->second);1139 ++itArea;1140 }1141 m->SharedClipboard.mapClipboardAreas.clear();1142 1050 #endif 1143 1051 … … 3445 3353 } 3446 3354 3447 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS /** @todo r=bird: Why is this still here? */3448 3449 /**3450 * Generates a new clipboard area on the host by opening (and locking) a new, temporary directory.3451 *3452 * @returns VBox status code.3453 * @param uAreaID Clipboard area ID to use for creation.3454 * @param fFlags Additional creation flags; currently unused and ignored.3455 * @param ppAreaData Where to return the created clipboard area on success.3456 */3457 int VirtualBox::i_clipboardAreaCreate(ULONG uAreaID, uint32_t fFlags, SharedClipboardAreaData **ppAreaData)3458 {3459 RT_NOREF(fFlags);3460 3461 int vrc;3462 3463 SharedClipboardAreaData *pAreaData = new SharedClipboardAreaData();3464 if (pAreaData)3465 {3466 vrc = pAreaData->Area.OpenTemp(uAreaID, SHCLAREA_OPEN_FLAGS_MUST_NOT_EXIST);3467 if (RT_SUCCESS(vrc))3468 {3469 pAreaData->uID = uAreaID;3470 3471 *ppAreaData = pAreaData;3472 }3473 }3474 else3475 vrc = VERR_NO_MEMORY;3476 3477 LogFlowFunc(("uID=%RU32, rc=%Rrc\n", uAreaID, vrc));3478 return vrc;3479 }3480 3481 /**3482 * Destroys a formerly created clipboard area.3483 *3484 * @returns VBox status code.3485 * @param pAreaData Area data to destroy. The pointer will be invalid on successful return.3486 */3487 int VirtualBox::i_clipboardAreaDestroy(SharedClipboardAreaData *pAreaData)3488 {3489 if (!pAreaData)3490 return VINF_SUCCESS;3491 3492 /** @todo Do we need a worker for this to not block here for too long?3493 * This could take a while to clean up huge areas ... */3494 int vrc = pAreaData->Area.Close();3495 if (RT_SUCCESS(vrc))3496 {3497 delete pAreaData;3498 pAreaData = NULL;3499 }3500 3501 LogFlowFunc(("uID=%RU32, rc=%Rrc\n", pAreaData->uID, vrc));3502 return vrc;3503 }3504 3505 /**3506 * Registers and creates a new clipboard area on the host (for all VMs), returned the clipboard area ID for it.3507 *3508 * @returns HRESULT3509 * @param aParms Creation parameters. Currently unused.3510 * @param aID Where to return the clipboard area ID on success.3511 */3512 HRESULT VirtualBox::i_onClipboardAreaRegister(const std::vector<com::Utf8Str> &aParms, ULONG *aID)3513 {3514 RT_NOREF(aParms);3515 3516 HRESULT rc = S_OK;3517 3518 int vrc = RTCritSectEnter(&m->SharedClipboard.CritSect);3519 if (RT_SUCCESS(vrc))3520 {3521 try3522 {3523 if (m->SharedClipboard.mapClipboardAreas.size() < m->SharedClipboard.uMaxClipboardAreas)3524 {3525 for (unsigned uTries = 0; uTries < 32; uTries++) /* Don't try too hard. */3526 {3527 const ULONG uAreaID = m->SharedClipboard.GenerateAreaID();3528 3529 /* Area ID already taken? */3530 if (m->SharedClipboard.mapClipboardAreas.find(uAreaID) != m->SharedClipboard.mapClipboardAreas.end())3531 continue;3532 3533 SharedClipboardAreaData *pAreaData;3534 vrc = i_clipboardAreaCreate(uAreaID, 0 /* fFlags */, &pAreaData);3535 if (RT_SUCCESS(vrc))3536 {3537 m->SharedClipboard.mapClipboardAreas[uAreaID] = pAreaData;3538 m->SharedClipboard.uMostRecentClipboardAreaID = uAreaID;3539 3540 /** @todo Implement collision detection / wrap-around. */3541 3542 if (aID)3543 *aID = uAreaID;3544 3545 LogThisFunc(("Registered new clipboard area %RU32: '%s'\n",3546 uAreaID, pAreaData->Area.GetDirAbs()));3547 break;3548 }3549 }3550 3551 if (RT_FAILURE(vrc))3552 rc = setError(E_FAIL, /** @todo Find a better rc. */3553 tr("Failed to create new clipboard area (%Rrc)"), vrc);3554 }3555 else3556 {3557 rc = setError(E_FAIL, /** @todo Find a better rc. */3558 tr("Maximum number of concurrent clipboard areas reached (%RU32)"),3559 m->SharedClipboard.uMaxClipboardAreas);3560 }3561 }3562 catch (std::bad_alloc &ba)3563 {3564 vrc = VERR_NO_MEMORY;3565 RT_NOREF(ba);3566 }3567 3568 RTCritSectLeave(&m->SharedClipboard.CritSect);3569 }3570 LogFlowThisFunc(("rc=%Rhrc\n", rc));3571 return rc;3572 }3573 3574 /**3575 * Unregisters (destroys) a formerly created clipboard area.3576 *3577 * @returns HRESULT3578 * @param aID ID of clipboard area to destroy.3579 */3580 HRESULT VirtualBox::i_onClipboardAreaUnregister(ULONG aID)3581 {3582 HRESULT rc = S_OK;3583 3584 int vrc = RTCritSectEnter(&m->SharedClipboard.CritSect);3585 if (RT_SUCCESS(vrc))3586 {3587 SharedClipboardAreaMap::iterator itArea = m->SharedClipboard.mapClipboardAreas.find(aID);3588 if (itArea != m->SharedClipboard.mapClipboardAreas.end())3589 {3590 if (itArea->second->Area.GetRefCount() == 0)3591 {3592 vrc = i_clipboardAreaDestroy(itArea->second);3593 if (RT_SUCCESS(vrc))3594 {3595 m->SharedClipboard.mapClipboardAreas.erase(itArea);3596 }3597 }3598 else3599 rc = setError(E_ACCESSDENIED, /** @todo Find a better rc. */3600 tr("Area with ID %RU32 still in used, cannot unregister"), aID);3601 }3602 else3603 rc = setError(VBOX_E_OBJECT_NOT_FOUND, /** @todo Find a better rc. */3604 tr("Could not find a registered clipboard area with ID %RU32"), aID);3605 3606 int vrc2 = RTCritSectLeave(&m->SharedClipboard.CritSect);3607 AssertRC(vrc2);3608 }3609 LogFlowThisFunc(("aID=%RU32, rc=%Rhrc\n", aID, rc));3610 return rc;3611 }3612 3613 /**3614 * Attaches to an existing clipboard area.3615 *3616 * @returns HRESULT3617 * @param aID ID of clipboard area to attach.3618 */3619 HRESULT VirtualBox::i_onClipboardAreaAttach(ULONG aID)3620 {3621 HRESULT rc = S_OK;3622 3623 int vrc = RTCritSectEnter(&m->SharedClipboard.CritSect);3624 if (RT_SUCCESS(vrc))3625 {3626 SharedClipboardAreaMap::iterator itArea = m->SharedClipboard.mapClipboardAreas.find(aID);3627 if (itArea != m->SharedClipboard.mapClipboardAreas.end())3628 {3629 const uint32_t cRefs = itArea->second->Area.AddRef();3630 RT_NOREF(cRefs);3631 LogFlowThisFunc(("aID=%RU32 -> cRefs=%RU32\n", aID, cRefs));3632 vrc = VINF_SUCCESS;3633 }3634 else3635 rc = setError(VBOX_E_OBJECT_NOT_FOUND, /** @todo Find a better rc. */3636 tr("Could not find a registered clipboard area with ID %RU32"), aID);3637 3638 int vrc2 = RTCritSectLeave(&m->SharedClipboard.CritSect);3639 AssertRC(vrc2);3640 }3641 LogFlowThisFunc(("aID=%RU32, rc=%Rhrc\n", aID, rc));3642 return rc;3643 }3644 3645 /**3646 * Detaches from an existing clipboard area.3647 *3648 * @returns HRESULT3649 * @param aID ID of clipboard area to detach from.3650 */3651 HRESULT VirtualBox::i_onClipboardAreaDetach(ULONG aID)3652 {3653 HRESULT rc = S_OK;3654 3655 int vrc = RTCritSectEnter(&m->SharedClipboard.CritSect);3656 if (RT_SUCCESS(vrc))3657 {3658 SharedClipboardAreaMap::iterator itArea = m->SharedClipboard.mapClipboardAreas.find(aID);3659 if (itArea != m->SharedClipboard.mapClipboardAreas.end())3660 {3661 const uint32_t cRefs = itArea->second->Area.Release();3662 RT_NOREF(cRefs);3663 LogFlowThisFunc(("aID=%RU32 -> cRefs=%RU32\n", aID, cRefs));3664 vrc = VINF_SUCCESS;3665 }3666 else3667 rc = setError(VBOX_E_OBJECT_NOT_FOUND, /** @todo Find a better rc. */3668 tr("Could not find a registered clipboard area with ID %RU32"), aID);3669 3670 int rc2 = RTCritSectLeave(&m->SharedClipboard.CritSect);3671 AssertRC(rc2);3672 }3673 LogFlowThisFunc(("aID=%RU32, rc=%Rhrc\n", aID, rc));3674 return rc;3675 }3676 3677 /**3678 * Returns the ID of the most recent (last created) clipboard area,3679 * or NIL_SHCLAREAID if no clipboard area has been created yet.3680 *3681 * @returns Most recent clipboard area ID.3682 */3683 ULONG VirtualBox::i_onClipboardAreaGetMostRecent(void)3684 {3685 ULONG aID = 0;3686 int vrc2 = RTCritSectEnter(&m->SharedClipboard.CritSect);3687 if (RT_SUCCESS(vrc2))3688 {3689 aID = m->SharedClipboard.uMostRecentClipboardAreaID;3690 3691 vrc2 = RTCritSectLeave(&m->SharedClipboard.CritSect);3692 AssertRC(vrc2);3693 }3694 LogFlowThisFunc(("aID=%RU32\n", aID));3695 return aID;3696 }3697 3698 /**3699 * Returns the current reference count of a clipboard area.3700 *3701 * @returns Reference count of given clipboard area ID.3702 */3703 ULONG VirtualBox::i_onClipboardAreaGetRefCount(ULONG aID)3704 {3705 ULONG cRefCount = 0;3706 int rc2 = RTCritSectEnter(&m->SharedClipboard.CritSect);3707 if (RT_SUCCESS(rc2))3708 {3709 SharedClipboardAreaMap::iterator itArea = m->SharedClipboard.mapClipboardAreas.find(aID);3710 if (itArea != m->SharedClipboard.mapClipboardAreas.end())3711 {3712 cRefCount = itArea->second->Area.GetRefCount();3713 }3714 3715 rc2 = RTCritSectLeave(&m->SharedClipboard.CritSect);3716 AssertRC(rc2);3717 }3718 LogFlowThisFunc(("aID=%RU32, cRefCount=%RU32\n", aID, cRefCount));3719 return cRefCount;3720 }3721 3722 #endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */3723 3724 3355 /** 3725 3356 * @note Doesn't lock any object.
Note:
See TracChangeset
for help on using the changeset viewer.