blob: c17c7296c09599f175f1c3a4e53bb41692c980b8 [file] [log] [blame]
/*
* mt_support.h - multi-thread resource locking support declarations
*/
/*
* Author: Markku Laukkanen
* Created: 6-Sep-1999
* History:
* 8-Sep-1999 M. Slifcak method names changed;
* use array of resource locking structures.
*/
#ifndef MT_SUPPORT_H
#define MT_SUPPORT_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* Lock group identifiers
*/
#define MT_LIBRARY_ID 0
#define MT_APPLICATION_ID 1
#define MT_TOKEN_ID 2
#define MT_MAX_IDS 3 /* one greater than last from above */
#define MT_MAX_SUBIDS 10
/*
* Lock resource identifiers for library resources
*/
#define MT_LIB_NONE 0
#define MT_LIB_SESSION 1
#define MT_LIB_REQUESTID 2
#define MT_LIB_MESSAGEID 3
#define MT_LIB_SESSIONID 4
#define MT_LIB_TRANSID 5
#define MT_LIB_MAXIMUM 6 /* must be one greater than the last one */
#if defined(NETSNMP_REENTRANT) || defined(WIN32)
#if HAVE_PTHREAD_H
#include <pthread.h>
typedef pthread_mutex_t mutex_type;
#ifdef pthread_mutexattr_default
#define MT_MUTEX_INIT_DEFAULT pthread_mutexattr_default
#else
#define MT_MUTEX_INIT_DEFAULT 0
#endif
#elif defined(WIN32) || defined(cygwin)
#include <windows.h>
typedef CRITICAL_SECTION mutex_type;
#else /* HAVE_PTHREAD_H */
error "There is no re-entrant support as defined."
#endif /* HAVE_PTHREAD_H */
int snmp_res_init(void);
int snmp_res_lock(int groupID, int resourceID);
int snmp_res_unlock(int groupID, int resourceID);
int snmp_res_destroy_mutex(int groupID, int resourceID);
#else /* NETSNMP_REENTRANT */
#ifndef WIN32
#define snmp_res_init() do {} while (0)
#define snmp_res_lock(x,y) do {} while (0)
#define snmp_res_unlock(x,y) do {} while (0)
#define snmp_res_destroy_mutex(x,y) do {} while (0)
#endif /* WIN32 */
#endif /* NETSNMP_REENTRANT */
#ifdef __cplusplus
}
#endif
#endif /* MT_SUPPORT_H */