| 2878 | |
| 2879 | |
| 2880 | void 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 | |
| 2931 | void LockManager::purge_process(prc* process) |
nothing calls this directly
no test coverage detected