summaryrefslogtreecommitdiffstats
path: root/video_in_hal/vehicleservice/positioning_base_library/library/src/_pbMutex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'video_in_hal/vehicleservice/positioning_base_library/library/src/_pbMutex.cpp')
-rwxr-xr-xvideo_in_hal/vehicleservice/positioning_base_library/library/src/_pbMutex.cpp1423
1 files changed, 0 insertions, 1423 deletions
diff --git a/video_in_hal/vehicleservice/positioning_base_library/library/src/_pbMutex.cpp b/video_in_hal/vehicleservice/positioning_base_library/library/src/_pbMutex.cpp
deleted file mode 100755
index 06254ab..0000000
--- a/video_in_hal/vehicleservice/positioning_base_library/library/src/_pbMutex.cpp
+++ /dev/null
@@ -1,1423 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @file
- * _pbMutex.cpp
- */
-
-/*---------------------------------------------------------------------------------*
- * Include Files *
- *---------------------------------------------------------------------------------*/
-
-#ifndef PT_PB_MUTEX_STUB__CWORD71_
-
-#include <vehicle_service/positioning_base_library.h>
-#include "_pbInternalProc.h"
-#include <native_service/cl_lock.h>
-#include <native_service/cl_lockid.h>
-#include "WPF_STD_private.h"
-#include "tchar.h"
-
-/*---------------------------------------------------------------------------------*
- * Define *
- *---------------------------------------------------------------------------------*/
-/* Mutex control table name (Shared Memory) */
-#define MUTEX_CTRL_TBL_NAME __TEXT("POS_BASE_MUTEX_TABLE")
-
-/*
- Max. available Lock ID
- Note : Lock ID application is 1 (for BaseAPI initialization) + 1 (for Mutex function control) + 30 (for provision) = 32
-*/
-#define MAX_CTRL_MUTEX_NUM (30)
-
-#define FULL_CTRL_MUTEX_NUM (MAX_CTRL_MUTEX_NUM - 4) /** Mutex control data threshold (no free) */
-#define WARN_CTRL_MUTEX_NUM (MAX_CTRL_MUTEX_NUM - 10) /** Mutex control data threshold (warning) */
-
-/*
- ID needs to be aplicated
-
- If you increase or decrease the IDs, define maximum number of managed LOCK IDs and
- the default setting of "Lock ID Resource List" must also be changed.
-*/
-#define MUTEX_LOCK_ID_0 LOCK_POS_MTX_2 /* Mutex management-information-exclusive control */
-#define MUTEX_LOCK_ID_1 LOCK_POS_MTX_3
-#define MUTEX_LOCK_ID_2 LOCK_POS_MTX_4
-#define MUTEX_LOCK_ID_3 LOCK_POS_MTX_5
-#define MUTEX_LOCK_ID_4 LOCK_POS_MTX_6
-#define MUTEX_LOCK_ID_5 LOCK_POS_MTX_7
-#define MUTEX_LOCK_ID_6 LOCK_POS_MTX_8
-#define MUTEX_LOCK_ID_7 LOCK_POS_MTX_9
-#define MUTEX_LOCK_ID_8 LOCK_POS_MTX_10
-#define MUTEX_LOCK_ID_9 LOCK_POS_MTX_11
-#define MUTEX_LOCK_ID_10 LOCK_POS_MTX_12
-#define MUTEX_LOCK_ID_11 LOCK_POS_MTX_13
-#define MUTEX_LOCK_ID_12 LOCK_POS_MTX_14
-#define MUTEX_LOCK_ID_13 LOCK_POS_MTX_15
-#define MUTEX_LOCK_ID_14 LOCK_POS_MTX_16
-#define MUTEX_LOCK_ID_15 LOCK_POS_MTX_17
-#define MUTEX_LOCK_ID_16 LOCK_POS_MTX_18
-#define MUTEX_LOCK_ID_17 LOCK_POS_MTX_19
-#define MUTEX_LOCK_ID_18 LOCK_POS_MTX_20
-#define MUTEX_LOCK_ID_19 LOCK_POS_MTX_21
-#define MUTEX_LOCK_ID_20 LOCK_POS_MTX_22
-#define MUTEX_LOCK_ID_21 LOCK_POS_MTX_23
-#define MUTEX_LOCK_ID_22 LOCK_POS_MTX_24
-#define MUTEX_LOCK_ID_23 LOCK_POS_MTX_25
-#define MUTEX_LOCK_ID_24 LOCK_POS_MTX_26
-#define MUTEX_LOCK_ID_25 LOCK_POS_MTX_27
-#define MUTEX_LOCK_ID_26 LOCK_POS_MTX_28
-#define MUTEX_LOCK_ID_27 LOCK_POS_MTX_29
-#define MUTEX_LOCK_ID_28 LOCK_POS_MTX_30
-#define MUTEX_LOCK_ID_29 LOCK_POS_MTX_31
-#define MUTEX_LOCK_ID_30 LOCK_POS_MTX_32
-
-typedef int32 LOCK_ID;
-
-/*---------------------------------------------------------------------------------*
- * Structure *
- *---------------------------------------------------------------------------------*/
-/*!
- @brief Mutex control information(Interprocess common-details)
- */
-typedef struct {
- LOCK_ID lock_id; /**< Lock ID */
- TCHAR name[NAME_MAX]; /**< Mutex Name */
- int32 ref_cnt; /**< Reference Counter */
- uint32_t thread_id; /**< Thread IDs while Lock is being acquired (Initial value:0) Note: For debugging */
- BOOL is_rel_fail; /**< Release failure information (Failed:TRUE) Note: For debugging */
- BOOL is_forbid_access; /**< Deletion occurred during Lock acquisition (Deletion occurred:TRUE) Note: For debugging */
-} MUTEX_CTRL_SHARED_DETAIL;
-
-/*!
- @brief Mutex control information (Interprocess common)
- */
-typedef struct {
- MUTEX_CTRL_SHARED_DETAIL detail[MAX_CTRL_MUTEX_NUM]; /**< Common Infomation */
- uint32_t use_cnt; /**< Use Counter */
- uint32_t rsv_cnt; /**< Reserve Counter */
-} MUTEX_CTRL_SHARED_INFO;
-
-/*!
- @brief Mutex control information
-*/
-typedef struct {
- HANDLE handle[MAX_CTRL_MUTEX_NUM]; /**< Mutex Handle */
- int32 ref_cnt[MAX_CTRL_MUTEX_NUM]; /**< Reference Counter */
- MUTEX_CTRL_SHARED_INFO* info; /**< Common Infomation */
-} MUTEX_CTRL_INFO;
-
-/*---------------------------------------------------------------------------------*
- * Grobal Value *
- *---------------------------------------------------------------------------------*/
-/**
- Mutex control table pointer (Partial shared memory)
- Note: Access to this instance shall be made through the operation module.
- */
-static MUTEX_CTRL_INFO g_mutex_ctrl_tbl; // NOLINT(readability/nolint) global class instance
-
-static HANDLE g_h_mtx; /** Mutex control-information-locking Mutex handle */
-static HANDLE g_h_shm; /** Shared memory handle */ // Coverity CID: 18788 compliant
-
-
-/** Lock ID Resource List */
-static const LOCK_ID kLockIdList[MAX_CTRL_MUTEX_NUM] = {
- MUTEX_LOCK_ID_1,
- MUTEX_LOCK_ID_2,
- MUTEX_LOCK_ID_3,
- MUTEX_LOCK_ID_4,
- MUTEX_LOCK_ID_5,
- MUTEX_LOCK_ID_6,
- MUTEX_LOCK_ID_7,
- MUTEX_LOCK_ID_8,
- MUTEX_LOCK_ID_9,
- MUTEX_LOCK_ID_10,
- MUTEX_LOCK_ID_11,
- MUTEX_LOCK_ID_12,
- MUTEX_LOCK_ID_13,
- MUTEX_LOCK_ID_14,
- MUTEX_LOCK_ID_15,
- MUTEX_LOCK_ID_16,
- MUTEX_LOCK_ID_17,
- MUTEX_LOCK_ID_18,
- MUTEX_LOCK_ID_19,
- MUTEX_LOCK_ID_20,
- MUTEX_LOCK_ID_21,
- MUTEX_LOCK_ID_22,
- MUTEX_LOCK_ID_23,
- MUTEX_LOCK_ID_24,
- MUTEX_LOCK_ID_25,
- MUTEX_LOCK_ID_26,
- MUTEX_LOCK_ID_27,
- MUTEX_LOCK_ID_28,
- MUTEX_LOCK_ID_29,
- MUTEX_LOCK_ID_30,
-};
-
-/*
- Mutex property information (Information for each process)
- _pb_CreateMutex calls -> 1
- DeleteMutex calls -> 0
- Only "1" can be used in the process.
- */
-BOOL g_is_mutex_owner_tbl[MAX_CTRL_MUTEX_NUM];
-
-/*---------------------------------------------------------------------------------*
- * Local Function Prototype *
- *---------------------------------------------------------------------------------*/
-/* Mutex Control Table Manipulation Functions */
-static void MutexSetLockIdOfCtrlTbl(u_int32 idx, LOCK_ID l_id); /* Set Lock ID */
-static LOCK_ID MutexGetLockIdOfCtrlTbl(u_int32 idx); /* Get Lock ID */
-static void MutexSetMutexNameOfCtrlTbl(u_int32 idx, LPCTSTR name); /* Set Mutex name */
-static void MutexSetMutexHandleOfCtrlTbl(u_int32 idx, HANDLE handle); /* Set Mutex handle */
-static HANDLE MutexGetMutexHandleOfCtrlTbl(u_int32 idx); /* Get Mutex Handle */
-static void MutexSetTidOfCtrlTbl(uint32_t idx, uint32_t tid); /* Set thread ID while Lock is being acquired */
-static uint32_t MutexGetTidOfCtrlTbl(uint32_t idx); /* Get thread ID while Lock is being acquired */
-static void MutexSetIsRelFailOfCtrlTbl(uint32_t idx, BOOL flag); /* Set release failure information */
-static void MutexSetIsForbidAccessOfCtrlTbl(uint32_t idx, BOOL flag); /* Set deletion occurrence while Lock is being acquired */
-static u_int32 MutexGetIdxOfCtrlTbl(HANDLE h_mutex); /* Get index for access */
-static void MutexIncRefCntOfCtrlTbl(u_int32 idx); /* Increment Mutex reference counter */
-static void MutexDecRefCntOfCtrlTbl(u_int32 idx); /* Decrement Mutex reference counter */
-static int32 MutexGetRefCntOfCtrlTbl(u_int32 idx); /* Get Mutex reference counter */
-static int32 MutexGetRefCntLocalOfCtrlTbl(u_int32 idx); /* Get mutex reference counter (in-process) */
-static u_int32 MutexSearchNameOfCtrlTbl(LPCTSTR name); /* Search mutex name */
-static u_int32 MutexSearchEmptyOfCtrlTbl(void); /* Search unused area */
-static void MutexIncUseCntOfCtrlInfo(void); /* Increment Mutex using counter */
-static void MutexDecUseCntOfCtrlInfo(void); /* Decrement Mutex using counter */
-static void MutexIncRsvCntOfCtrlInfo(void); /* Increment Mutex reserved counter */
-static void MutexDecRsvCntOfCtrlInfo(void); /* Decrement Mutex reserved counter */
-
-/* Mutex ownership-information manipulation functions */
-static void MutexSetFlagOfOwnerTbl(u_int32 idx, BOOL flag); /* Set ownership-information */
-static BOOL MutexGetFlagOfOwnerTbl(u_int32 idx); /* Get ownership-information */
-
-/* Mutex manipulation functions for accessing Mutex control tables */
-static void MutexCreateMutex(void); /* Create Mutex */
-static void MutexLockMutex(void); /* Get Mutex */
-static void MutexUnlockMutex(void); /* Release Mutex */
-static void MutexDeleteMutex(void); /* Delete Mutex */
-
-/*---------------------------------------------------------------------------------*
- * Function *
- *---------------------------------------------------------------------------------*/
-/**
- * @brief
- * Initialize the mutex function
- *
- * Call the in-process initialization API for locking between processes that provide CLS.<br>
- * Create shared memory for a Mutex control table.<br>
- * Create a mutex for accessing Mutex control info.<br>
- * If an error occurs during internal processing of this API, subsequent normal operations cannot be performed, so call _pb_Exit().
- *
- * @return RET_NORMAL
- */
-RET_API MutexInit(void) {
- RET_API ret_api = RET_NORMAL;
- MUTEX_CTRL_SHARED_INFO **pp_tbl;
- u_int32 idx;
-
- memset(g_mutex_ctrl_tbl.handle, 0, sizeof(g_mutex_ctrl_tbl.handle));
- memset(g_mutex_ctrl_tbl.ref_cnt, 0, sizeof(g_mutex_ctrl_tbl.ref_cnt));
-
- /* Set pointer to Mutex control table */
- pp_tbl = &(g_mutex_ctrl_tbl.info);
-
- MutexCreateMutex(); /* Create Mutex for accessing Mutex control info */
-
- MutexLockMutex(); /* Get Mutex for accessing Mutex control info */
-
- /* Open the Mutex control table shared memory */
- g_h_shm = OpenSharedMemory((TCHAR*)(MUTEX_CTRL_TBL_NAME), // NOLINT(readability/casting)
- sizeof(MUTEX_CTRL_SHARED_INFO));
-
- /* If called for the first time within all processes, an error occurs and the following processing is performed. */
- if (g_h_shm == NULL) { // LCOV_EXCL_BR_LINE 200: can not be other val
- /* Create shared memory for Mutex control table */
- // LCOV_EXCL_BR_LINE 200: can not return NULL
- g_h_shm = CreateSharedMemory((TCHAR*)MUTEX_CTRL_TBL_NAME, // NOLINT(readability/casting)
- sizeof(MUTEX_CTRL_SHARED_INFO));
- if (g_h_shm == NULL) /* In case of an error */ { // LCOV_EXCL_BR_LINE 200: can not return NULL
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "_pb_CreateShareData ERROR [hShm:%p]", g_h_shm);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 200: cannot return NULL
- /* don't arrive here. */
- }
- }
-
- MutexUnlockMutex(); /* Release of Mutex for accessing Mutex control info */
-
- /* Set addresses of the acquired shared memory as a pointer of the Mutex control table. */
- *pp_tbl = reinterpret_cast<MUTEX_CTRL_SHARED_INFO*>(GetSharedMemoryPtr(g_h_shm));
-
- /* Initialize various information of control table */
- for (idx = 0; idx < MAX_CTRL_MUTEX_NUM; idx++) {
- /* Set Lock ID in Mutex control table(Overwrite from the second process onwards) */
- MutexSetLockIdOfCtrlTbl(idx, kLockIdList[idx]);
-
- MutexSetFlagOfOwnerTbl(idx, FALSE);
- }
-
- return ret_api;
-}
-
-/**
- * @brief
- * Terminate
- */
-RET_API MutexTerm(void) { // LCOV_EXCL_START 8:dead code
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- RET_API ret_api = RET_NORMAL;
-
- CloseSharedMemory(g_h_shm);
-
- MutexDeleteMutex();
-
- return ret_api;
-}
-// LCOV_EXCL_STOP
-
-/**
- * @brief
- * Create Mutex
- *
- * Create a named mutex that can be locked between processes.
- *
- * @param[in] lp_mutex_attributes Security descriptor(Unused)
- * @param[in] b_initial_owner Initial owner flag(Unused)
- * @param[in] lp_name Mutex name
- *
- * @return Except NULL Handle of the created mutex (Management information pointer)<br>
- * NULL ABEND
- */
-HANDLE _pb_CreateMutex(LPSECURITY_ATTRIBUTES lp_mutex_attributes, // NOLINT(readability/nolint) WPF_SYSAPI.h API
- BOOL b_initial_owner, LPCTSTR lp_name) {
- int32 idx; /* For accessing Mutex control table */
- HANDLE h_mutex = NULL; /* Mutex handle */
- void *p_addr;
- int32 errno;
- LOCK_ID lock_id;
- size_t len;
-
- /* Null check */
- if (lp_name == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argument ERROR!!");
- } else {
- len = _tcslen(lp_name);
- if (len >= NAME_MAX) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argument ERROR!! " \
- "Length of mutex name is too long(>=%d). [len:%zu]", NAME_MAX, len);
- } else {
- MutexLockMutex(); /* Get Mutex for accessing Mutex control info */
-
- /* Retrieve whether the specified mutex name exists in the Mutex control table */
- idx = MutexSearchNameOfCtrlTbl(lp_name);
-
- /* Already assigned */
- if (idx != MAX_CTRL_MUTEX_NUM) {
- /* Get mutex handle from Mutex control table */
- h_mutex = MutexGetMutexHandleOfCtrlTbl(idx);
-
- /* First-time creation within a process */
- if (h_mutex == NULL) {
- /* Get Lock ID */
- lock_id = MutexGetLockIdOfCtrlTbl(idx);
-
- /* Lock information mapping (CLS) */
- p_addr = CL_LockMap(lock_id); // LCOV_EXCL_BR_LINE 4: nsfw error
- /* In case of an error */
- if (p_addr == MAP_FAILED) { // LCOV_EXCL_BR_LINE 4: nsfw error
- /* Output an error log and return an error value */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockMap ERROR!! [p_addr:%p, errno:%d]", p_addr, errno);
- } else {
- /* Successful allocation */
- /* Set Mutex handle in the mutex management table */
- MutexSetMutexHandleOfCtrlTbl(idx, (HANDLE)p_addr);
-
- h_mutex = (HANDLE)p_addr;
- }
- }
-
- if (h_mutex != NULL) { // LCOV_EXCL_BR_LINE 200: h_mutex can not be NULL
- /* Increment Mutex reference counter */
- MutexIncRefCntOfCtrlTbl(idx);
-
- FRAMEWORKUNIFIEDLOG(ZONE_20, __FUNCTION__,
- "### MUTEX TABLE INFORMATION # (+) idx:%d HANDLE:%p, " \
- "ref_cnt:%d, LOCK_ID:%d, NAME:%s, ref_cnt:%d, tid:%d, fail:%d, forbid:%d",
- idx,
- g_mutex_ctrl_tbl.handle[idx],
- g_mutex_ctrl_tbl.ref_cnt[idx],
- g_mutex_ctrl_tbl.info->detail[idx].lock_id,
- g_mutex_ctrl_tbl.info->detail[idx].name,
- g_mutex_ctrl_tbl.info->detail[idx].ref_cnt,
- g_mutex_ctrl_tbl.info->detail[idx].thread_id,
- g_mutex_ctrl_tbl.info->detail[idx].is_rel_fail,
- g_mutex_ctrl_tbl.info->detail[idx].is_forbid_access);
- }
- } else {
- /* For a new assignment */
- /* Get the free space in the mutex management table. */
- idx = MutexSearchEmptyOfCtrlTbl();
-
- /* Get Lock ID */
- lock_id = MutexGetLockIdOfCtrlTbl(idx);
-
- /* Lock information mapping (CLS) */
- p_addr = CL_LockMap(lock_id);
-
- /* In case of an error */
- if (p_addr == MAP_FAILED) { // LCOV_EXCL_BR_LINE 4: nsfw error
- /* Output an error log and return an error value. */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "CL_LockMap ERROR!! " \
- "[p_addr:%p, errno:%d] In _pb_CreateMutex", p_addr, errno);
- } else {
- /* Successful allocation */
- /* Set Mutex Hanlde in the mutex management table */
- MutexSetMutexHandleOfCtrlTbl(idx, (HANDLE)p_addr);
-
- /* Set the mutex name in the mutex management table */
- MutexSetMutexNameOfCtrlTbl(idx, lp_name);
-
- /* Increment Mutex reference counter */
- MutexIncRefCntOfCtrlTbl(idx);
-
- /* Increment mutex using counter */
- MutexIncUseCntOfCtrlInfo();
-
- h_mutex = (HANDLE)p_addr;
-
- FRAMEWORKUNIFIEDLOG(ZONE_20, __FUNCTION__,
- "### MUTEX TABLE INFORMATION # (++) idx:%d HANDLE:%p, ref_cnt:%d, " \
- "LOCK_ID:%d, NAME:%s, ref_cnt:%d, tid:%d, fail:%d, forbid:%d",
- idx,
- g_mutex_ctrl_tbl.handle[idx],
- g_mutex_ctrl_tbl.ref_cnt[idx],
- g_mutex_ctrl_tbl.info->detail[idx].lock_id,
- g_mutex_ctrl_tbl.info->detail[idx].name,
- g_mutex_ctrl_tbl.info->detail[idx].ref_cnt,
- g_mutex_ctrl_tbl.info->detail[idx].thread_id,
- g_mutex_ctrl_tbl.info->detail[idx].is_rel_fail,
- g_mutex_ctrl_tbl.info->detail[idx].is_forbid_access);
- }
- }
-
- if (h_mutex != NULL) { // LCOV_EXCL_BR_LINE 200: can not be NULL
- /* Update Mutex ownership */
- MutexSetFlagOfOwnerTbl(idx, TRUE);
- }
-
- /* Release the Mutex for accessing Mutex control info */
- MutexUnlockMutex();
- }
- }
-
- return h_mutex;
-}
-
-/**
- * @brief
- * Delete the mutex
- *
- * Decrement the Mutex reference counter and delete it when it reaches zero.
- *
- * @param[in] h_mutex Mutex handle (CreateMutex return value)
- *
- * @return WAIT_OBJECT_0 Normal completion<br>
- * WAIT_FAILED ABEND
- */
-DWORD PbDeleteMutex(HANDLE h_mutex) {
- DWORD lret = WAIT_OBJECT_0;
- u_int32 idx;
- int32 ref_cnt;
- int32 ret;
- BOOL is_owner;
- uint32_t tid;
-
- /* Null check */
- if (h_mutex == NULL) { // LCOV_EXCL_BR_LINE 6: h_mutex cannot be NULL
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR");
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; /* ABEND */ // LCOV_EXCL_LINE 6: h_mutex cannot be NULL
- } else {
- MutexLockMutex(); /* Get Mutex for accessing Mutex control info */
-
- /* Retrieve the index of the management table containing the Mutex handles */
- idx = MutexGetIdxOfCtrlTbl(h_mutex);
- /* When the specified Mutex handle is not registered */
- if (idx == MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 200: idx can no be MAX_CTRL_MUTEX_NUM
- FRAMEWORKUNIFIEDLOG(ZONE_20, __FUNCTION__, "Argment ERROR [h_mutex:%p]", h_mutex);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; /* ABEND */ // LCOV_EXCL_LINE 200: idx can no be MAX_CTRL_MUTEX_NUM
- } else {
- /* If it is registered */
- /* Determinate its ownership */
- is_owner = MutexGetFlagOfOwnerTbl(idx);
- if (is_owner == TRUE) {
- /* Get Mutex reference counter */
- ref_cnt = MutexGetRefCntOfCtrlTbl(idx);
-
- /* No clients are using the specified Mutex. */
- if ((ref_cnt - 1) <= 0) {
- /* Lock information unmapping (CLS) */
- ret = CL_LockUnmap(reinterpret_cast<void*>(h_mutex)); // LCOV_EXCL_BR_LINE 4: nsfw error
- /* When an error occurs */
- if (ret == -1) { // LCOV_EXCL_BR_LINE 4: nsfw error
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "CL_LockUnmap ERROR");
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; /* ABEND */ // LCOV_EXCL_LINE 4: nsfw error
- } else {
- /* If successful */
- /* Remove Mutex hanlde from Mutex control table */
- MutexSetMutexHandleOfCtrlTbl(idx, NULL);
-
- /* Delete the mutex name from the Mutex control table */
- MutexSetMutexNameOfCtrlTbl(idx, "");
-
- /* Update Mutex ownership */
- MutexSetFlagOfOwnerTbl(idx, FALSE);
-
- /* Decrement Mutex reference counter */
- MutexDecRefCntOfCtrlTbl(idx);
-
- /* Decrement mutex using counter */
- MutexDecUseCntOfCtrlInfo();
-
- tid = MutexGetTidOfCtrlTbl(idx);
- if (tid != 0) { // LCOV_EXCL_BR_LINE 200: tid can not be 0
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- MutexSetIsForbidAccessOfCtrlTbl(idx, TRUE); // LCOV_EXCL_LINE 200: tid can not be 0
- }
-
- /* Initialize debug information */
- MutexSetTidOfCtrlTbl(idx, 0);
- MutexSetIsRelFailOfCtrlTbl(idx, FALSE);
-
- FRAMEWORKUNIFIEDLOG(ZONE_20, __FUNCTION__,
- "### MUTEX TABLE INFORMATION # (--) idx:%d HANDLE:%p, ref_cnt(local):%d, " \
- "LOCK_ID:%d, NAME:%s, ref_cnt:%d, tid:%d, fail:%d, forbid:%d",
- idx,
- g_mutex_ctrl_tbl.handle[idx],
- g_mutex_ctrl_tbl.ref_cnt[idx],
- g_mutex_ctrl_tbl.info->detail[idx].lock_id,
- g_mutex_ctrl_tbl.info->detail[idx].name,
- g_mutex_ctrl_tbl.info->detail[idx].ref_cnt,
- g_mutex_ctrl_tbl.info->detail[idx].thread_id,
- g_mutex_ctrl_tbl.info->detail[idx].is_rel_fail,
- g_mutex_ctrl_tbl.info->detail[idx].is_forbid_access);
- }
- } else {
- /* If exists */
- /* Determine if any clients are referencing in the process */
- ref_cnt = MutexGetRefCntLocalOfCtrlTbl(idx);
- if ((ref_cnt - 1) <= 0) { // LCOV_EXCL_BR_LINE 200: ref_cnt can not bigger than 1
- // LCOV_EXCL_START 200: ref_cnt can not bigger than 1
- //AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- /* Lock information unmapping (CLS) */
- ret = CL_LockUnmap(reinterpret_cast<void*>(h_mutex));
- /* When an error occurs */
- if (ret == -1) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "CL_LockUnmap ERROR");
- lret = WAIT_FAILED; /* ABEND */
- } else {
- /* If successful */
- /* Remove Mutex Hanlde from the Mutex control table */
- MutexSetMutexHandleOfCtrlTbl(idx, NULL);
-
- /* Update Mutex ownership */
- MutexSetFlagOfOwnerTbl(idx, FALSE);
- }
- // LCOV_EXCL_STOP
- }
-
- if (lret == WAIT_OBJECT_0) {
- /* Decrement Mutex refernce counter */
- MutexDecRefCntOfCtrlTbl(idx);
-
- FRAMEWORKUNIFIEDLOG(ZONE_20, __FUNCTION__,
- "### MUTEX TABLE INFORMATION # (-) idx:%d HANDLE:%p, ref_cnt(local):%d, " \
- "LOCK_ID:%d, NAME:%s, ref_cnt:%d, tid:%d, fail:%d, forbid:%d",
- idx,
- g_mutex_ctrl_tbl.handle[idx],
- g_mutex_ctrl_tbl.ref_cnt[idx],
- g_mutex_ctrl_tbl.info->detail[idx].lock_id,
- g_mutex_ctrl_tbl.info->detail[idx].name,
- g_mutex_ctrl_tbl.info->detail[idx].ref_cnt,
- g_mutex_ctrl_tbl.info->detail[idx].thread_id,
- g_mutex_ctrl_tbl.info->detail[idx].is_rel_fail,
- g_mutex_ctrl_tbl.info->detail[idx].is_forbid_access);
- }
- }
-
- } else { // LCOV_EXCL_BR_LINE 200: is_owner can not be FALSE
- /* If it is not the owner */
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; // LCOV_EXCL_LINE 200: is_owner can not be FALSE
- }
- }
-
- MutexUnlockMutex(); /* Release of Mutex for accessing Mutex control info */
- }
-
- return lret;
-}
-
-/**
- * @brief
- * Mutex Lock
- *
- * Take ownership of the mutex and start locking.
- *
- * @param[in] h_mutex Mutex handle(CreateMutex return value)
- * @param[in] timeout Timeout (Millisecond)
- *
- * @return WAIT_OBJECT_0 Succeeded to get ownership<br>
- * WAIT_TIMEOUT Failed to get ownership (Timeout)<br>
- * WAIT_FAILED Failed to get ownership (Error)
- */
-DWORD PbMutexLock(HANDLE h_mutex, DWORD timeout) {
- DWORD lret = WAIT_OBJECT_0;
- int32 ret;
- DWORD time_out_cnt = 0;
- u_int32 idx;
- BOOL is_owner;
- uint32_t tid;
-
- /* Null check */
- if (h_mutex == NULL) { // LCOV_EXCL_BR_LINE 6: h_mutex cannot be NULL
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR");
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; /* ABEND */ // LCOV_EXCL_LINE 6: h_mutex cannot be NULL
- } else {
- /* Retrieve the index of the management table containing the Mutex handles */
- idx = MutexGetIdxOfCtrlTbl(h_mutex);
- /* When the specified Mutex handle is not registered */
- if (idx == MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot be MAX_CTRL_MUTEX_NUM
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [h_mutex:%p, idx:%d]", \
- h_mutex, idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; /* ABEND */ // LCOV_EXCL_LINE 6: idx cannot be MAX_CTRL_MUTEX_NUM
- } else {
- /* If it is registered */
- /* Determinate ownership */
- is_owner = MutexGetFlagOfOwnerTbl(idx);
- if (is_owner == TRUE) {
- tid = PbGetTid();
-
- /* No timeout specified */
- if (timeout == INFINITE) { // LCOV_EXCL_BR_LINE 6: timeout will not be other case
- /* Get Lock (CLS) */
- ret = CL_LockGet(reinterpret_cast<void*>(h_mutex)); // LCOV_EXCL_BR_LINE 4: nsfw error
- if (ret != 0) /* In case of ABEND */ { // LCOV_EXCL_BR_LINE 4: nsfw error
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockGet ERROR [h_mutex:%p, ret:%d]", h_mutex, ret);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; /* ABEND */ // LCOV_EXCL_LINE 4: nsfw error
- } else {
- /* Set thread ID during lock */
- MutexSetTidOfCtrlTbl(idx, tid);
- }
- } else {
- // LCOV_EXCL_START 6: timeout will not be other case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- /* Timeout specified */
- while (1) {
- /* Get Lock (CLS) */
- ret = CL_LockNowait(reinterpret_cast<void*>(h_mutex));
- if (ret != 0) /* In case of ABEND */ {
- /* Invalid parameter */
- if (ret != EBUSY) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockGet ERROR [h_mutex:%p, ret:%d]", h_mutex, ret);
- lret = WAIT_FAILED; /* ABEND */
- break;
- }
-
- time_out_cnt++;
- if (time_out_cnt <= timeout) {
- usleep(1000);
- } else {
- /* Timeout error */
- lret = WAIT_TIMEOUT;
- break;
- }
- } else {
- /* Successful acquisition */
- /* Set thread ID during lock */
- MutexSetTidOfCtrlTbl(idx, tid);
-
- break;
- }
- }
- // LCOV_EXCL_STOP
- }
- } else { // LCOV_EXCL_BR_LINE 200: is_owner can not be FALSE
- /* If it is not the owner */
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- lret = WAIT_FAILED; // LCOV_EXCL_LINE 200: is_owner can not be FALSE
- }
- }
- }
-
- return lret;
-}
-
-/**
- * @brief
- * Mutex Unlock
- *
- * Release the mutex ownership and terminate the lock.
- *
- * @param[in] h_mutex Mutex handle(CreateMutex return value)
- *
- * @return TURE Normal<br>
- * FALSE Error
- */
-BOOL PbMutexUnlock(HANDLE h_mutex) {
- BOOL bret = FALSE;
- int32 ret;
- u_int32 idx;
- BOOL is_owner;
- uint32_t tid;
-
- /* Null check */
- if (h_mutex == NULL) { // LCOV_EXCL_BR_LINE 6: h_mutex can not be NULL
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR");
- } else {
- /* Retrieve the index of the management table containing the Mutex handle */
- idx = MutexGetIdxOfCtrlTbl(h_mutex);
- /* When the specified Mutex handle is not registered */
- if (idx == MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 200: idx can not be MAX_CTRL_MUTEX_NUM
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "MutexGetIdxOfCtrlTbl ERROR [h_mutex:%p, idx:%d]", h_mutex, idx);
- } else {
- /* If it is registered */
- /* Determinate ownership */
- is_owner = MutexGetFlagOfOwnerTbl(idx);
- if (is_owner == TRUE) { // LCOV_EXCL_BR_LINE 4: nsfw error
- /* Release thread ID setting during lock */
- MutexSetTidOfCtrlTbl(idx, 0);
-
- /* Release the Lock */
- ret = CL_LockRelease(reinterpret_cast<void*>(h_mutex));
- if (ret == 0) /* If successful */ { // LCOV_EXCL_BR_LINE 4: nsfw error
- bret = TRUE;
-
- } else { // LCOV_EXCL_BR_LINE 4: nsfw error
- // LCOV_EXCL_START 4: nsfw error
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- /* Failed */
- tid = PbGetTid();
-
- /* Retry to set the thread ID during lock */
- MutexSetTidOfCtrlTbl(idx, tid);
-
- /* Add the release failure information */
- MutexSetIsRelFailOfCtrlTbl(idx, TRUE);
-
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockRelease ERROR [h_mutex:%p, ret:%d]", h_mutex, ret);
- // LCOV_EXCL_STOP
- }
- }
- }
- }
-
- return bret;
-}
-
-/*---------------------------------------------------------------------------------*
- * Local Function *
- *---------------------------------------------------------------------------------*/
-/**
- * @brief
- * Set the Lock ID (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- * @param[in] l_id Lock ID
- */
-static void MutexSetLockIdOfCtrlTbl(u_int32 idx, LOCK_ID l_id) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d, l_id:%d]", idx, l_id);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- g_mutex_ctrl_tbl.info->detail[idx].lock_id = l_id;
- }
-
- return;
-}
-
-/**
- * @brief
- * Get the Lock ID (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- */
-static LOCK_ID MutexGetLockIdOfCtrlTbl(u_int32 idx) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- }
-
- return g_mutex_ctrl_tbl.info->detail[idx].lock_id;
-}
-
-/**
- * @brief
- * Set the Mutex name (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- * @param[in] name Mutex name
- */
-static void MutexSetMutexNameOfCtrlTbl(u_int32 idx, LPCTSTR name) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d, name:%s]", idx, name);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- _tcscpy(g_mutex_ctrl_tbl.info->detail[idx].name, name);
- }
-
- return;
-}
-
-/**
- * @brief
- * Set the Mutex handle (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- * @param[in] handle Mutex handle
- */
-static void MutexSetMutexHandleOfCtrlTbl(u_int32 idx, HANDLE handle) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d, handle:%p]", idx, handle);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- g_mutex_ctrl_tbl.handle[idx] = handle;
- }
-
- return;
-}
-
-/**
- * @brief
- * Get the Mutex handle (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- *
- * @return Mutex handle
- */
-static HANDLE MutexGetMutexHandleOfCtrlTbl(u_int32 idx) {
- HANDLE handle = NULL;
-
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- handle = g_mutex_ctrl_tbl.handle[idx];
- }
-
- return handle;
-}
-
-/**
- * @brief
- * Set the thread ID during lock acquisition (Mutex control table)
- *
- * @param[in] idx Control table accessor
- * @param[in] tid Thread ID
- * @note If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- */
-static void MutexSetTidOfCtrlTbl(uint32_t idx, uint32_t tid) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argument ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- g_mutex_ctrl_tbl.info->detail[idx].thread_id = tid;
- }
-
- return;
-}
-
-
-/**
- * @brief
- * Get the thread ID during lock acquisition (Mutex control table)
- *
- * @param[in] idx Control table accessor
- *
- * @return Thread ID
- *
- * @note If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- */
-static uint32_t MutexGetTidOfCtrlTbl(uint32_t idx) {
- uint32_t tid = 0;
-
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argument ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- tid = g_mutex_ctrl_tbl.info->detail[idx].thread_id;
- }
-
- return tid;
-}
-
-
-/**
- * @brief
- * Set the release failure information (Mutex control table)
- *
- * @param[in] idx Control table accessor
- * @param[in] flag Failed to release:TURE
- * @note If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- */
-static void MutexSetIsRelFailOfCtrlTbl(uint32_t idx, BOOL flag) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argument ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- g_mutex_ctrl_tbl.info->detail[idx].is_rel_fail = flag;
- }
-
- return;
-}
-
-/**
- * @brief
- * Set deletion-occurrence information during Lock acquisition (Mutex control table)
- *
- * @param[in] idx Control table accessor
- * @param[in] flag When deletion occurs while Lock is being acquired:TRUE
- * @note If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- */
-static void MutexSetIsForbidAccessOfCtrlTbl(uint32_t idx, BOOL flag) { // LCOV_EXCL_START 8:dead code
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argument ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- g_mutex_ctrl_tbl.info->detail[idx].is_forbid_access = flag;
- }
-
- return;
-}
-// LCOV_EXCL_STOP
-
-/**
- * @brief
- * Get index for access (Mutex control table)
- *
- * Return the index for accessing the area of the Mutex control table in which <br>
- * the specified mutex handle is registered. If the specified handle is not <br>
- * registered, the maximum number of mutex management (MAX_MUTEX_CTRL_NUM) is returned.
- *
- * @param[in] h_mutex Mutex handle
- *
- * @return Index for access (Specified handle is already registered)<br>
- * Maximum mutex management value (Specified handle is not registered)
- */
-static u_int32 MutexGetIdxOfCtrlTbl(HANDLE h_mutex) {
- u_int32 idx;
- HANDLE handle;
-
- for (idx = 0; idx < MAX_CTRL_MUTEX_NUM; idx++) {
- /* Get handle from Mutex control table */
- handle = MutexGetMutexHandleOfCtrlTbl(idx);
-
- if (handle == h_mutex) {
- break;
- }
- }
-
- return idx;
-}
-
-/**
- * @brief
- * Increment the Mutex reference counter (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- */
-static void MutexIncRefCntOfCtrlTbl(u_int32 idx) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- }
-
- g_mutex_ctrl_tbl.info->detail[idx].ref_cnt++;
- g_mutex_ctrl_tbl.ref_cnt[idx]++;
-
- return;
-}
-
-/**
- * @brief
- * Decrement the Mutex reference counter (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- */
-static void MutexDecRefCntOfCtrlTbl(u_int32 idx) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- }
-
- g_mutex_ctrl_tbl.info->detail[idx].ref_cnt--;
- g_mutex_ctrl_tbl.ref_cnt[idx]--;
-
- return;
-}
-
-/**
- * @brief
- * Get the Mutex Reference Counter (Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- *
- * @return Reference counter value
- */
-static int32 MutexGetRefCntOfCtrlTbl(u_int32 idx) {
- int32 ret = 0;
-
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- ret = g_mutex_ctrl_tbl.info->detail[idx].ref_cnt;
- }
-
- return ret;
-}
-
-/**
- * @brief
- * Get mutex reference counter (in-process)(Mutex control table)
- *
- * If an invalid value is specified for an argument, the system assumes that it is a design problem and calls _pb_Exit().
- *
- * @param[in] idx Control table accessor
- *
- * @return Reference counter value
- */
-static int32 MutexGetRefCntLocalOfCtrlTbl(u_int32 idx) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- }
-
- return g_mutex_ctrl_tbl.ref_cnt[idx];
-}
-
-/**
- * @brief
- * Search mutex name (Mutex control table)
- *
- * Retrieve whether the specified mutex is already registered in the Mutex control table.<br>
- * If it is registered, the access index is returned.If it is not registered,<br>
- * return the maximum mutex management value(MAX_CTRL_MUTEX_NUM).
- *
- * @param[in] name Mutex name
- *
- * @return Index for access(If it is registered)<br>
- * Maximum mutex management value (Not registered)
- */
-static u_int32 MutexSearchNameOfCtrlTbl(LPCTSTR name) {
- int32 ret;
- u_int32 idx;
-
- for (idx = 0; idx < MAX_CTRL_MUTEX_NUM; idx++) {
- ret = _tcscmp(g_mutex_ctrl_tbl.info->detail[idx].name, name);
-
- /* If there is a match */
- if (ret == 0) {
- break;
- }
- }
-
- return idx;
-}
-
-/**
- * @brief
- * Search unused area (Mutex control table)
- *
- * Return the lowest-numbered index for accessing unused space in the Mutex control table.<br>
- * Return the maximum value((MAX_CTRL_MUTEX_NUM)) of message queue management <br>
- * when no unused area exists.
- *
- * @return Index for access (Unused area exists)<br>
- * Maximum mutex management value (No unused area)
- */
-static u_int32 MutexSearchEmptyOfCtrlTbl(void) {
- u_int32 idx;
-
- idx = MutexSearchNameOfCtrlTbl("");
-
- return idx;
-}
-
-/**
- * @brief
- * Set the Mutex ownership flag (Ownership-information table)
- *
- * @param[in] idx Control table accessor
- * @param[in] flag ownership-information
- */
-static void MutexSetFlagOfOwnerTbl(u_int32 idx, BOOL flag) {
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d, flag:%d]", idx, flag);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- g_is_mutex_owner_tbl[idx] = flag;
- }
-
- return;
-}
-
-/**
- * @brief
- * Get the Mutex ownership flag (Ownership-information table)
- *
- * @param[in] idx Control table accessor
- *
- * @return TRUE Owned
- * FALSE Not owned
- */
-static BOOL MutexGetFlagOfOwnerTbl(u_int32 idx) {
- BOOL bret = FALSE;
-
- /* check index */
- if (idx >= MAX_CTRL_MUTEX_NUM) { // LCOV_EXCL_BR_LINE 6: idx cannot greater
- /* forbidden */
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Argment ERROR [idx:%d]", idx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 6: idx cannot greater
- /* don't arrive here. */
- } else {
- bret = g_is_mutex_owner_tbl[idx];
- }
-
- return bret;
-}
-
-/**
- * @brief
- * Create Mutex for accessing the Mutex control table
- */
-static void MutexCreateMutex(void) {
- g_h_mtx = (HANDLE)CL_LockMap(MUTEX_LOCK_ID_0); // LCOV_EXCL_BR_LINE 4: nsfw error
- if (g_h_mtx == NULL) { // LCOV_EXCL_BR_LINE 4: nsfw error
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "CL_LockMap ERROR [g_h_mtx:%p]", g_h_mtx);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 4: nsfw error
- /* don't arrive here. */
- }
-
- return;
-}
-
-/**
- * @brief
- * Delete Mutex for accessing Mutex control table
- */
-static void MutexDeleteMutex(void) { // LCOV_EXCL_START 8:dead code
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- int32 ret;
-
- ret = CL_LockUnmap(g_h_mtx);
- if (ret != 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockUnmap ERROR [g_h_mtx:%p, ret:%d]", g_h_mtx, ret);
- _pb_Exit();
- /* don't arrive here. */
- }
-
- return;
-}
-// LCOV_EXCL_STOP
-
-/**
- * @brief
- * Get Mutex for accessing Mutex control table
- */
-static void MutexLockMutex(void) {
- int32 ret;
-
- ret = CL_LockGet(g_h_mtx); // LCOV_EXCL_BR_LINE 4: nsfw error
- if (ret != 0) { // LCOV_EXCL_BR_LINE 4: nsfw error
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockGet ERROR [g_h_mtx:%p, ret:%d]", g_h_mtx, ret);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 4: nsfw error
- /* don't arrive here. */
- }
-
- return;
-}
-
-/**
- * @brief
- * Release Mutex for accessing Mutex control table
- */
-static void MutexUnlockMutex(void) {
- int32 ret;
-
- ret = CL_LockRelease(g_h_mtx); // LCOV_EXCL_BR_LINE 4: nsfw error
- if (ret != 0) { // LCOV_EXCL_BR_LINE 4: nsfw error
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "CL_LockRelease ERROR [g_h_mtx:%p, ret:%d]", g_h_mtx, ret);
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- _pb_Exit(); // LCOV_EXCL_LINE 4: nsfw error
- /* don't arrive here. */
- }
-
- return;
-}
-
-/**
- * @brief
- * Get dump information
- *
- * @param[out] p_buf Dump info
- * @param[in/out] p_len Buffer size
- */
-void _pb_GetDebugMutexMngTbl(void* p_buf, uint8_t* p_len) {
- static uint8_t buf[DEBUG_DUMP_MAX_SIZE];
- static uint8_t buf_tmp[512];
- static uint8_t buf_info[DEBUG_DUMP_MAX_SIZE];
- uint32_t i;
- uint8_t cnt = 0;
-
- if ((p_buf != NULL) && (p_len != NULL)) {
- memset(&buf[0], 0x00, sizeof(buf));
- memset(&buf_info[0], 0x00, sizeof(buf_info));
- for (i = 0; i < MAX_CTRL_MUTEX_NUM; i++) {
- memset(&buf_tmp[0], 0x00, sizeof(buf_tmp));
- snprintf(reinterpret_cast<char *>(&buf_tmp[0]), sizeof(buf_tmp),
- "\n [%02d]id:%10d, nm:%40s, ref_cnt:%10d, tid:%03d, fail:%01d, " \
- "forbid:%01d, handle:%10p, ref_cnt(local):%10d",
- i,
- g_mutex_ctrl_tbl.info->detail[i].lock_id,
- g_mutex_ctrl_tbl.info->detail[i].name,
- g_mutex_ctrl_tbl.info->detail[i].ref_cnt,
- g_mutex_ctrl_tbl.info->detail[i].thread_id,
- g_mutex_ctrl_tbl.info->detail[i].is_rel_fail,
- g_mutex_ctrl_tbl.info->detail[i].is_forbid_access,
- g_mutex_ctrl_tbl.handle[i],
- g_mutex_ctrl_tbl.ref_cnt[i]);
- strncat(reinterpret_cast<char *>(&buf_info[0]), reinterpret_cast<char *>(&buf_tmp[0]), \
- strlen(reinterpret_cast<char *>(&buf_tmp[0])));
- if (((i + 1) % 10) == 0) {
- cnt++;
- memset(&buf[0], 0x00, sizeof(buf));
- snprintf(reinterpret_cast<char *>(&buf[0]), sizeof(buf),
- "Mutex-%d%s",
- cnt,
- &buf_info[0]);
- memcpy(p_buf, &buf[0], sizeof(buf));
- p_buf = reinterpret_cast<void *>((reinterpret_cast<uint8_t *>(p_buf)) + sizeof(buf));
- memset(&buf_info[0], 0x00, sizeof(buf_info));
- if (cnt >= *p_len) {
- break;
- }
- }
- }
- if (cnt < *p_len) {
- if (buf_info[0] != 0x00) {
- cnt++;
- memset(&buf[0], 0x00, sizeof(buf));
- snprintf(reinterpret_cast<char *>(&buf[0]), sizeof(buf),
- "Mutex-%d%s",
- cnt,
- &buf_info[0]);
- memcpy(p_buf, &buf[0], sizeof(buf));
- }
- *p_len = cnt;
- }
- }
-}
-
-/**
- * @brief
- * Increment the Mutex using counter
- *
- * @param[in] none
- */
-static void MutexIncUseCntOfCtrlInfo(void) {
- g_mutex_ctrl_tbl.info->use_cnt++;
- return;
-}
-
-/**
- * @brief
- * Decrement Mutex using counter
- *
- * @param[in] none
- */
-static void MutexDecUseCntOfCtrlInfo(void) {
- g_mutex_ctrl_tbl.info->use_cnt--;
- return;
-}
-
-/**
- * @brief
- * Increment Mutex reserved counter
- *
- * @param[in] none
- */
-static void MutexIncRsvCntOfCtrlInfo(void) {
- g_mutex_ctrl_tbl.info->rsv_cnt++;
- return;
-}
-
-/**
- * @brief
- * Decrement Mutex reserved counter
- *
- * @param[in] none
- */
-static void MutexDecRsvCntOfCtrlInfo(void) {
- g_mutex_ctrl_tbl.info->rsv_cnt--;
- return;
-}
-
-/**
- * @brief
- * Determine resources ready (Mutex control data)
- *
- * @param[in] none
- *
- * @return BOOL
- * @retval TRUE : Normal
- * @retval FALSE : Error (Resource shortage)
- */
-BOOL _pb_GetMutexResource(void) {
- BOOL ret = TRUE;
- uint32_t cnt;
-
- MutexLockMutex();
-
- /* Increment Mutex reserved counter */
- MutexIncRsvCntOfCtrlInfo();
-
- cnt = g_mutex_ctrl_tbl.info->use_cnt + g_mutex_ctrl_tbl.info->rsv_cnt;
- if (cnt >= FULL_CTRL_MUTEX_NUM) {
- ret = FALSE;
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "Lack of resources [FATAL][use_cnt:%d rsv_cnt:%d]", g_mutex_ctrl_tbl.info->use_cnt, \
- g_mutex_ctrl_tbl.info->rsv_cnt);
- } else if (cnt >= WARN_CTRL_MUTEX_NUM) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, \
- "Lack of resources [WARN][use_cnt:%d rsv_cnt:%d]", g_mutex_ctrl_tbl.info->use_cnt, \
- g_mutex_ctrl_tbl.info->rsv_cnt);
- }
-
- MutexUnlockMutex();
-
- return ret;
-}
-
-/**
- * @brief
- * Release resources (Mutex control data)
- *
- * @param[in] none
- *
- * @return none
- */
-void _pb_ReleaseMutexResource(void) {
- MutexLockMutex();
-
- /* Decrement Mutex reserved counter */
- MutexDecRsvCntOfCtrlInfo();
-
- MutexUnlockMutex();
-
- return;
-}
-#endif /* PT_PB_MUTEX_STUB__CWORD71_ */