You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zy...@apache.org on 2013/10/31 11:35:29 UTC
git commit: TS-2276: manager memory leak in some case
Updated Branches:
refs/heads/master e819a5f1b -> 316b45041
TS-2276: manager memory leak in some case
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/316b4504
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/316b4504
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/316b4504
Branch: refs/heads/master
Commit: 316b450415f41cf80dca05f18538aa27c53b7b51
Parents: e819a5f
Author: Yu Qing <zh...@taobao.com>
Authored: Fri Oct 18 14:45:30 2013 +0800
Committer: Zhao Yongming <mi...@gmail.com>
Committed: Thu Oct 31 18:33:41 2013 +0800
----------------------------------------------------------------------
CHANGES | 3 +++
mgmt/Alarms.cc | 14 +-------------
mgmt/Alarms.h | 2 +-
mgmt/api/EventControlMain.cc | 2 +-
mgmt/utils/MgmtHashTable.h | 18 +++++++++++++++++-
5 files changed, 23 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/316b4504/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 3dc9a51..fb18b34 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
Changes with Apache Traffic Server 4.1.0
+ *) [TS-2276] manager memory leak in some case.
+ Author: Yu Qing
+
*( [TS-1638] less strict on kernel version checking in clustering.
Author: Yu Qing
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/316b4504/mgmt/Alarms.cc
----------------------------------------------------------------------
diff --git a/mgmt/Alarms.cc b/mgmt/Alarms.cc
index c655d90..cbf2dc0 100644
--- a/mgmt/Alarms.cc
+++ b/mgmt/Alarms.cc
@@ -347,21 +347,9 @@ Alarms::signalAlarm(alarm_t a, const char *desc, const char *ip)
for (entry = ink_hash_table_iterator_first(cblist, &iterator_state);
entry != NULL; entry = ink_hash_table_iterator_next(cblist, &iterator_state)) {
- char *tmp, *tmp2;
AlarmCallbackFunc func = (AlarmCallbackFunc) ink_hash_table_entry_value(remote_alarms, entry);
- if (ip) {
- tmp = (char *)ats_strdup(ip);
- } else {
- tmp = NULL;
- }
-
- if (desc) {
- tmp2 = ats_strdup(desc);
- } else {
- tmp2 = NULL;
- }
Debug("alarm", "[Alarms::signalAlarm] invoke callback for %d", a);
- (*(func)) (a, tmp, tmp2);
+ (*(func)) (a, ip, desc);
}
/* Priority 2 alarms get signalled if they are the first unsolved occurence. */
if (priority == 2 && alarm_bin && alarm_bin_path && !ip) {
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/316b4504/mgmt/Alarms.h
----------------------------------------------------------------------
diff --git a/mgmt/Alarms.h b/mgmt/Alarms.h
index 82dc282..23bc81c 100644
--- a/mgmt/Alarms.h
+++ b/mgmt/Alarms.h
@@ -88,7 +88,7 @@ const int minOEMkey = 1000; // used as offset
const int maxOEMkey = 6000;
typedef int alarm_t;
-typedef void (*AlarmCallbackFunc) (alarm_t, char *, char *);
+typedef void (*AlarmCallbackFunc) (alarm_t, const char *, const char *);
typedef struct _alarm
{
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/316b4504/mgmt/api/EventControlMain.cc
----------------------------------------------------------------------
diff --git a/mgmt/api/EventControlMain.cc b/mgmt/api/EventControlMain.cc
index 3b500c2..ffc9c8b 100644
--- a/mgmt/api/EventControlMain.cc
+++ b/mgmt/api/EventControlMain.cc
@@ -200,7 +200,7 @@ delete_event_queue(LLQ * q)
* note: None
*********************************************************************/
void
-apiEventCallback(alarm_t newAlarm, char * /* ip ATS_UNUSED */, char *desc)
+apiEventCallback(alarm_t newAlarm, const char * /* ip ATS_UNUSED */, const char *desc)
{
// create an TSEvent
// addEvent(new_alarm, ip, desc) // adds event to mgmt_events
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/316b4504/mgmt/utils/MgmtHashTable.h
----------------------------------------------------------------------
diff --git a/mgmt/utils/MgmtHashTable.h b/mgmt/utils/MgmtHashTable.h
index 4ec435e..1c5274a 100644
--- a/mgmt/utils/MgmtHashTable.h
+++ b/mgmt/utils/MgmtHashTable.h
@@ -81,9 +81,25 @@ public:
int mgmt_hash_table_delete(InkHashTableKey key)
{
+ InkHashTableEntry *entry;
int ret;
ink_mutex_acquire(&mutex);
- ret = ink_hash_table_delete(ht, key);
+ if (destroy_and_free) {
+ entry = ink_hash_table_lookup_entry(ht, key);
+ if (entry != NULL) {
+ InkHashTableValue value = ink_hash_table_entry_value(ht, entry);
+ if (value != NULL) {
+ ats_free(value);
+ }
+ ret = ink_hash_table_delete(ht, key);
+ }
+ else { //not found
+ ret = 0;
+ }
+ }
+ else {
+ ret = ink_hash_table_delete(ht, key);
+ }
ink_mutex_release(&mutex);
return ret;
} /* End MgmtHashTable::mgmt_hash_table_delete */