# HG changeset patch # User KUBOTA Yuji # Date 1489075880 -32400 # Node ID 9db2ed159a6f065b8c0c1f0e2c92d479ce836feb # Parent 8a678cb965cc6436582b84555b564ff686278ee0 Bug 3223: Cannot set empty value to signal setting Reviewed-by: yasuenag https://github.com/HeapStats/heapstats/pull/47 diff -r 8a678cb965cc -r 9db2ed159a6f agent/ChangeLog --- a/agent/ChangeLog Mon Jan 16 23:57:55 2017 +0900 +++ b/agent/ChangeLog Fri Mar 10 01:11:20 2017 +0900 @@ -1,3 +1,7 @@ +2017-03-10 KUBOTA Yuji + + * Bug 3223: Cannot set empty value to signal setting + 2017-01-16 Yasumasa Suenaga * Bug 3285: JVM aborted on assert code at MonitorContended JVMTI event diff -r 8a678cb965cc -r 9db2ed159a6f agent/src/util.cpp --- a/agent/src/util.cpp Mon Jan 16 23:57:55 2017 +0900 +++ b/agent/src/util.cpp Fri Mar 10 01:11:20 2017 +0900 @@ -388,7 +388,7 @@ const unsigned char *tables = NULL; /* pcre_maketables(); */ /* Initialize PCRE. */ - char pExpression[255] = "^\\s*(.+?)\\s*=\\s*(.+?)\\s*$"; + char pExpression[255] = "^\\s*(.+?)\\s*=\\s*(.+?)?\\s*$"; const char *errMsg; int errOffset; real_pcre *pPcre; @@ -442,8 +442,8 @@ } /* Get matched value string. */ if (pcre_get_substring(pBuff, matchArr, matchCnt, 2, &value) <= 0) { - pcre_free_substring(key); - continue; + /* Get "" to set default value or disable option */ + value = (char *)calloc(1, sizeof(char)); } /* Check key name. */ @@ -541,20 +541,32 @@ || 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