Document of c-modernization-kit (funcman) 1.0.0

Loading...
Searching...
No Matches
funcman_dispose.c
Go to the documentation of this file.
1
13
14#include <funcman.h>
15
16/* doxygen コメントは、ヘッダに記載 */
17 void funcman_dispose(funcman_object *const *fobj_array, const size_t fobj_length)
18{
19 size_t fobj_index;
20
21 /* DllMain / destructor コンテキストから呼ばれるため、
22 * ローダーロック保持中にミューテックスを取得すると
23 * デッドロックを引き起こす恐れがある。
24 * このコンテキストではシングルスレッド動作が保証されるため、
25 * ロックなしで解放する。 */
26
27 for (fobj_index = 0; fobj_index < fobj_length; fobj_index++)
28 {
29 funcman_object *cache = fobj_array[fobj_index];
30
31 if (cache->handle == NULL)
32 {
33 continue;
34 }
35
36#ifndef _WIN32
37 dlclose(cache->handle);
38#else /* _WIN32 */
39 FreeLibrary(cache->handle);
40#endif /* _WIN32 */
41
42 cache->handle = NULL;
43 cache->func_ptr = NULL;
44 }
45}
funcman.h
関数動的呼び出し機構 (funcman) の公開 API ヘッダー。
funcman_dispose
void funcman_dispose(funcman_object *const *fobj_array, const size_t fobj_length)
funcman_object ポインタ配列を解放します。
Definition funcman_dispose.c:17
funcman_object
関数ポインタキャッシュエントリ。
Definition funcman.h:67
funcman_object::handle
MODULE_HANDLE handle
キャッシュ済みハンドル (NULL = 未ロード)。
Definition funcman.h:71
funcman_object::func_ptr
void * func_ptr
キャッシュ済み関数ポインタ (NULL = 未取得)。
Definition funcman.h:72