5 #include "spinlock.hpp"
7 #include "class/native_method.hpp"
9 #include "capi/capi_constants.h"
12 #include <unordered_map>
13 #include <unordered_set>
19 typedef std::unordered_set
<std::string
> CApiBlackList
;
20 typedef std::vector
<std::mutex
*> CApiLocks
;
21 typedef std::unordered_map
<std::string
, int> CApiLockMap
;
23 typedef std::vector
<std::string
> CApiConstantNameMap
;
24 typedef std::unordered_map
<int, MemoryHandle
*> CApiConstantHandleMap
;
27 CApiConstantNameMap capi_constant_name_map_
;
28 CApiConstantHandleMap capi_constant_map_
;
29 CApiBlackList capi_black_list_
;
30 CApiLocks capi_locks_
;
31 CApiLockMap capi_lock_map_
;
35 locks::spinlock_mutex capi_ds_lock_
;
36 locks::spinlock_mutex capi_locks_lock_
;
37 locks::spinlock_mutex capi_constant_lock_
;
43 void after_fork_child(STATE
);
45 void set_use_capi_lock(bool s
) {
49 locks::spinlock_mutex
& capi_ds_lock() {
53 locks::spinlock_mutex
& capi_constant_lock() {
54 return capi_constant_lock_
;
57 int capi_lock_index(std::string name
);
59 void enter_capi(STATE
, const char* file
, int line
);
60 void leave_capi(STATE
);
62 void setup_capi_constant_names();
63 CApiConstantNameMap
& capi_constant_name_map() {
64 return capi_constant_name_map_
;
67 CApiConstantHandleMap
& capi_constant_map() {
68 return capi_constant_map_
;
71 void initialize_capi_black_list();