⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mt_support.c

📁 snmp up 2
💻 C
字号:
/* * mt_support.c - multi-thread resource locking support  *//* * Author: Markku Laukkanen * Created: 6-Sep-1999 * History: *  8-Sep-1999 M. Slifcak method names changed; *                        use array of resource locking structures. */#include <net-snmp/net-snmp-config.h>#include <errno.h>#include <net-snmp/library/mt_support.h>#ifdef __cplusplusextern          "C" {#endif#ifdef NS_REENTRANTstatic mutex_type s_res[MT_MAX_IDS][MT_LIB_MAXIMUM];  /* locking structures */static mutex_type *_mt_res(int groupID, int resourceID){    if (groupID < 1) {	return 0;    }    if (groupID >= MT_MAX_IDS) {	return 0;    }    if (resourceID < 1) {	return 0;    }    if (resourceID >= MT_LIB_MAXIMUM) {	return 0;    }    return (&s_res[groupID][resourceID]);}static intsnmp_res_init_mutex(mutex_type *mutex){    int rc = 0;#if HAVE_PTHREAD_H    rc = pthread_mutex_init(mutex, MT_MUTEX_INIT_DEFAULT);#elif defined(WIN32)    InitializeCriticalSection(mutex);#endif    return rc;}intsnmp_res_init(void){    int ii, jj, rc = 0;    mutex_type *mutex;    for (jj = 0; (0 == rc) && (jj < MT_MAX_IDS); jj++) {	for (ii = 0; (0 == rc) && (ii < MT_LIB_MAXIMUM); ii++) {	    mutex = _mt_res(jj, ii);	    if (!mutex) {		continue;	    }	    rc = snmp_res_init_mutex(mutex);	}    }    return rc;}intsnmp_res_destroy_mutex(int groupID, int resourceID){    int rc = 0;    mutex_type *mutex = _mt_res(groupID, resourceID);    if (!mutex) {	return EFAULT;    }#if HAVE_PTHREAD_H    rc = pthread_mutex_destroy(mutex);#elif defined(WIN32)    DeleteCriticalSection(mutex);#endif    return rc;}intsnmp_res_lock(int groupID, int resourceID){    int rc = 0;    mutex_type *mutex = _mt_res(groupID, resourceID);        if (!mutex) {	return EFAULT;    }#if HAVE_PTHREAD_H    rc = pthread_mutex_lock(mutex);#elif defined(WIN32)    EnterCriticalSection(mutex);#endif    return rc;}intsnmp_res_unlock(int groupID, int resourceID){    int rc = 0;    mutex_type *mutex = _mt_res(groupID, resourceID);    if (!mutex) {	return EFAULT;    }#if HAVE_PTHREAD_H    rc = pthread_mutex_unlock(mutex);#elif defined(WIN32)    LeaveCriticalSection(mutex);#endif    return rc;}#else  /*  NS_REENTRANT  */#ifdef WIN32/* * Provide "do nothing" targets for Release (.DLL) builds.  */intsnmp_res_init(void){    return 0;}intsnmp_res_lock(int groupID, int resourceID){    return 0;}intsnmp_res_unlock(int groupID, int resourceID){    return 0;}intsnmp_res_destroy_mutex(int groupID, int resourceID){    return 0;}#endif /*  WIN32  */#endif /*  NS_REENTRANT  */#ifdef __cplusplus};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -