lytboris Thu, 17 Feb 2011 12:02:16 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=308427
Log: * Fix memory leak on concurrent new, open * change comments to ANSI-C style * added compatibility with net-snmp prior 5.4 Changed paths: U php/php-src/trunk/ext/snmp/config.m4 U php/php-src/trunk/ext/snmp/snmp.c Modified: php/php-src/trunk/ext/snmp/config.m4 =================================================================== --- php/php-src/trunk/ext/snmp/config.m4 2011-02-17 11:55:01 UTC (rev 308426) +++ php/php-src/trunk/ext/snmp/config.m4 2011-02-17 12:02:16 UTC (rev 308427) @@ -112,6 +112,14 @@ $SNMP_SHARED_LIBADD ]) + dnl Check whether shutdown_snmp_logging() exists. + PHP_CHECK_LIBRARY($SNMP_LIBNAME, shutdown_snmp_logging, + [ + AC_DEFINE(HAVE_SHUTDOWN_SNMP_LOGGING, 1, [ ]) + ], [], [ + $SNMP_SHARED_LIBADD + ]) + dnl Test build. PHP_CHECK_LIBRARY($SNMP_LIBNAME, init_snmp, [ Modified: php/php-src/trunk/ext/snmp/snmp.c =================================================================== --- php/php-src/trunk/ext/snmp/snmp.c 2011-02-17 11:55:01 UTC (rev 308426) +++ php/php-src/trunk/ext/snmp/snmp.c 2011-02-17 12:02:16 UTC (rev 308427) @@ -117,6 +117,17 @@ #define zend_parse_parameters_none() zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") #endif +/* For net-snmp prior to 5.4 */ +//#ifndef HAVE_SHUTDOWN_SNMP_LOGGING +extern netsnmp_log_handler *logh_head; +#define shutdown_snmp_logging() \ + { \ + snmp_disable_log(); \ + while(NULL != logh_head) \ + netsnmp_remove_loghandler( logh_head ); \ + } +//#endif + /* For really old ucd-snmp versions.. */ #ifndef HAVE_SNMP_PARSE_OID #define snmp_parse_oid read_objid @@ -960,7 +971,7 @@ } } objid_set->count++; - } else if (Z_TYPE_PP(oid) == IS_ARRAY) { // we got objid array + } else if (Z_TYPE_PP(oid) == IS_ARRAY) { /* we got objid array */ if (zend_hash_num_elements(Z_ARRVAL_PP(oid)) == 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Got empty OID array"); return FALSE; @@ -1366,7 +1377,7 @@ snmp_object = (php_snmp_object *)zend_object_store_get_object(object TSRMLS_CC); if (snmp_object->max_oids > 0) { objid_set.step = snmp_object->max_oids; - if (max_repetitions < 0) { // unspecified in function call, use session-wise + if (max_repetitions < 0) { /* unspecified in function call, use session-wise */ max_repetitions = snmp_object->max_oids; } } @@ -1385,7 +1396,7 @@ } if (max_repetitions < 0) { - max_repetitions = 20; // provide correct default value + max_repetitions = 20; /* provide correct default value */ } php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, session, &objid_set, non_repeaters, max_repetitions, valueretrieval); @@ -1706,6 +1717,11 @@ return; } + /* handle re-open of snmp session */ + if (snmp_object->session) { + netsnmp_session_free(&(snmp_object->session)); + } + if (netsnmp_session_init(&(snmp_object->session), version, a1, a2, timeout, retries TSRMLS_CC)) { return; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php