2 * mt_support.c - multi-thread resource locking support
5 * Author: Markku Laukkanen
8 * 8-Sep-1999 M. Slifcak method names changed;
9 * use array of resource locking structures.
12 #include <net-snmp/net-snmp-config.h>
14 #include <net-snmp/library/mt_support.h>
22 static mutex_type s_res[MT_MAX_IDS][MT_LIB_MAXIMUM]; /* locking structures */
25 _mt_res(int groupID, int resourceID)
30 if (groupID >= MT_MAX_IDS) {
36 if (resourceID >= MT_LIB_MAXIMUM) {
39 return (&s_res[groupID][resourceID]);
43 snmp_res_init_mutex(mutex_type *mutex)
47 rc = pthread_mutex_init(mutex, MT_MUTEX_INIT_DEFAULT);
49 InitializeCriticalSection(mutex);
61 for (jj = 0; (0 == rc) && (jj < MT_MAX_IDS); jj++) {
62 for (ii = 0; (0 == rc) && (ii < MT_LIB_MAXIMUM); ii++) {
63 mutex = _mt_res(jj, ii);
67 rc = snmp_res_init_mutex(mutex);
75 snmp_res_destroy_mutex(int groupID, int resourceID)
78 mutex_type *mutex = _mt_res(groupID, resourceID);
84 rc = pthread_mutex_destroy(mutex);
86 DeleteCriticalSection(mutex);
93 snmp_res_lock(int groupID, int resourceID)
96 mutex_type *mutex = _mt_res(groupID, resourceID);
103 rc = pthread_mutex_lock(mutex);
105 EnterCriticalSection(mutex);
112 snmp_res_unlock(int groupID, int resourceID)
115 mutex_type *mutex = _mt_res(groupID, resourceID);
122 rc = pthread_mutex_unlock(mutex);
124 LeaveCriticalSection(mutex);
130 #else /* NS_REENTRANT */
134 * Provide "do nothing" targets for Release (.DLL) builds.
144 snmp_res_lock(int groupID, int resourceID)
150 snmp_res_unlock(int groupID, int resourceID)
156 snmp_res_destroy_mutex(int groupID, int resourceID)
161 #endif /* NS_REENTRANT */