MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / purge_owner

Method purge_owner

src/lock/lock.cpp:2880–2928  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2878
2879
2880void LockManager::purge_owner(SRQ_PTR purging_owner_offset, own* owner)
2881{
2882/**************************************
2883 *
2884 * p u r g e _ o w n e r
2885 *
2886 **************************************
2887 *
2888 * Functional description
2889 * Purge an owner and all of its associated locks.
2890 *
2891 **************************************/
2892 LOCK_TRACE(("purge_owner (%ld)\n", purging_owner_offset));
2893
2894 post_history(his_del_owner, purging_owner_offset, SRQ_REL_PTR(owner), 0, false);
2895
2896 // Release any locks that are active
2897
2898 SRQ lock_srq;
2899 while ((lock_srq = SRQ_NEXT(owner->own_requests)) != &owner->own_requests)
2900 {
2901 lrq* request = (lrq*) ((UCHAR*) lock_srq - offsetof(lrq, lrq_own_requests));
2902 release_request(request);
2903 }
2904
2905 // Release any repost requests left dangling on blocking queue
2906
2907 while ((lock_srq = SRQ_NEXT(owner->own_blocks)) != &owner->own_blocks)
2908 {
2909 lrq* const request = (lrq*) ((UCHAR*) lock_srq - offsetof(lrq, lrq_own_blocks));
2910 remove_que(&request->lrq_own_blocks);
2911 request->lrq_type = type_null;
2912 insert_tail(&m_sharedMemory->getHeader()->lhb_free_requests, &request->lrq_lbl_requests);
2913 }
2914
2915 // Release owner block
2916
2917 remove_que(&owner->own_prc_owners);
2918
2919 remove_que(&owner->own_lhb_owners);
2920 insert_tail(&m_sharedMemory->getHeader()->lhb_free_owners, &owner->own_lhb_owners);
2921
2922 owner->own_owner_type = 0;
2923 owner->own_owner_id = 0;
2924 owner->own_process = 0;
2925 owner->own_flags = 0;
2926
2927 m_sharedMemory->eventFini(&owner->own_wakeup);
2928}
2929
2930
2931void LockManager::purge_process(prc* process)

Callers

nothing calls this directly

Calls 3

eventFiniMethod · 0.80
release_requestFunction · 0.50
getHeaderMethod · 0.45

Tested by

no test coverage detected