#endif
#if VMG_MULTIPLICITY && defined(USE_ITHREADS) && defined(dMY_CXT) && defined(MY_CXT) && defined(START_MY_CXT) && defined(MY_CXT_INIT) && (defined(MY_CXT_CLONE) || defined(dMY_CXT_SV))
-# define VMG_THREADSAFE 1
+# ifndef VMG_THREADSAFE
+# define VMG_THREADSAFE 1
+# endif
# ifndef MY_CXT_CLONE
# define MY_CXT_CLONE \
dMY_CXT_SV; \
sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
# endif
#else
+# undef VMG_THREADSAFE
# define VMG_THREADSAFE 0
# undef dMY_CXT
# define dMY_CXT dNOOP
#if VMG_THREADSAFE
VMG_LOADED_LOCK;
- if (vmg_loaded <= 0) {
- assert(vmg_loaded == 0);
+ if (vmg_loaded == 0) {
MUTEX_INIT(&vmg_vtable_refcount_mutex);
MUTEX_INIT(&vmg_op_name_init_mutex);
+ vmg_loaded = 1;
+ } else {
+ assert(vmg_loaded > 0);
+ ++vmg_loaded;
}
- ++vmg_loaded;
VMG_LOADED_UNLOCK;
#endif