changeset 67:2518d4eee904

Bug 3223: Cannot set empty value to signal setting Reviewed-by: yasuenag https://github.com/HeapStats/heapstats/pull/47
author KUBOTA Yuji <kubota.yuji@lab.ntt.co.jp>
date Fri, 10 Mar 2017 01:14:55 +0900
parents bbf1ae6d2a2e
children 33bc182ce53a
files agent/ChangeLog agent/src/util.cpp
diffstat 2 files changed, 26 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/agent/ChangeLog	Mon Feb 27 19:25:26 2017 +0900
+++ b/agent/ChangeLog	Fri Mar 10 01:14:55 2017 +0900
@@ -1,3 +1,11 @@
+2017-03-10 KUBOTA Yuji <kubota.yuji@lab.ntt.co.jp>
+
+	* Bug 3223: Cannot set empty value to signal setting
+
+2017-02-27 Yasumasa Suenaga  <yasuenag@gmail.com>
+
+	* Bug 3331: Refactoring for memory management in HeapStats Agent
+
 2017-02-09 Yasumasa Suenaga  <yasuenag@gmail.com>
 
 	* Bug 3322: TClassContainer instance might be broken in multithreaded access
--- a/agent/src/util.cpp	Mon Feb 27 19:25:26 2017 +0900
+++ b/agent/src/util.cpp	Fri Mar 10 01:14:55 2017 +0900
@@ -499,11 +499,8 @@
             /* Get matched value string. */
             if (unlikely(pcre_get_substring(lineBuff, matchArr, matchCnt,
                 2, &value) <= 0)) {
-                
-                /* This config maybe designated default value. e.g. "aaa=" */
-                pcre_free_substring(key);
-                pcre_free_substring(value);
-                continue;
+                /* This maybe set default value or disable. e.g. "aaa=" */
+                value = (char *)calloc(1, sizeof(char));
             }
             
             /* Check key name. */
@@ -573,20 +570,30 @@
                 || strcmp(key, "signal_reload") == 0) {
                 
                 /* If signal is supported by JVM. */
-                if (isSupportSignal(value)) {
+                if (isSupportSignal(value) || value == NULL || value[0] == '\0') {
                     
                     /* Copy string exclude "SIG". */
                     if (strcmp(key, "logsignal_normal") == 0) {
                         free(arg.logSignalNormal);
-                        arg.logSignalNormal = strdup(value + 3);
-                        
+                        if (value == NULL || value[0] == '\0') {
+                            arg.logSignalNormal = strdup("");
+                        } else {
+                            arg.logSignalNormal = strdup(value + 3);
+                        }
                     } else if (strcmp(key, "logsignal_all") == 0) {
                         free(arg.logSignalAll);
-                        arg.logSignalAll = strdup(value + 3);
-                        
+                        if (value == NULL || value[0] == '\0') {
+                            arg.logSignalAll = strdup("");
+                        } else {
+                            arg.logSignalAll = strdup(value + 3);
+                        }
                     } else {
                         free(arg.reloadSignal);
-                        arg.reloadSignal = strdup(value + 3);
+                        if (value == NULL || value[0] == '\0') {
+                            arg.reloadSignal = strdup("");
+                        } else {
+                            arg.reloadSignal = strdup(value + 3);
+                        }
                     }
                 } else {
                     PRINT_WARN_MSG_HEADER