- /**
- * @file kc_lock_guard.c
- * @brief ロックガードモジュール
- */
- #include <stdio.h>
- #include <errno.h>
-
- #include <kc_lock_guard.h>
-
- /**
- * 指定された mutex がロックされるまで現在のスレッドをロックします。
- * ロックに成功するとロック管理用のオブジェクトを返します。
- *
- * @param mutex mutex
- * @return ロック管理用オブジェクト
- */
- KcLockGuard kc_lock_guard_init(mtx_t *mutex, const char *file, const char *func, int line)
- {
- KcLockGuard guard = {.mutex = mutex};
- if (mutex == NULL)
- {
- errno = EINVAL;
- perror("kc_lock_guard_init: (mutex = NULL)");
- fprintf(stderr, "%s:%s:%d kc_lock_guard_init : mutex = NULL\n", file, func, line);
- return guard;
- }
-
- errno = 0;
- int ret = mtx_lock(mutex);
- if (ret != thrd_success)
- {
- fprintf(stderr, "%s:%s:%d kc_lock_guard : mtx_lock error\n", file, func, line);
- guard.mutex = NULL;
- }
- return guard;
- }
-
- /**
- * 指定されたロック管理用オブジェクトのロックを解除します。
- *
- * @param guard ロック管理用オブジェクト
- */
- void kc_lock_guard_release(KcLockGuard *guard)
- {
- if (guard->mutex != NULL)
- {
- mtx_unlock(guard->mutex);
- guard->mutex = NULL;
- }
- }