Skip to content

Commit

Permalink
Merge pull request #41 from Viste/memleak
Browse files Browse the repository at this point in the history
unref msg and free all mem we can closes #39
  • Loading branch information
cavaliercoder committed Jan 12, 2020
2 parents 92ecb08 + 7e69664 commit c6c2c26
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/modules/systemd/cgroups.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ int cgroup_init()
zabbix_log(LOG_LEVEL_DEBUG, LOG_PREFIX "cpu_cgroup is cpuacct");
}

free(ddir);
pclose(fp);
return SYSINFO_RET_OK;
}
Expand Down
32 changes: 26 additions & 6 deletions src/modules/systemd/dbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,20 @@ DBusMessage *dbus_exchange_message(DBusMessage *msg) {

if (NULL == msg) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "message is null");
dbus_message_unref(msg);
return NULL;
}

// send message
if (!dbus_connection_send_with_reply (conn, msg, &pending, timeout)) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "oom sending message");
dbus_message_unref(msg);
return NULL;
}

if (NULL == pending) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "pending message is null");
dbus_message_unref(msg);
return NULL;
}

Expand All @@ -101,13 +104,16 @@ DBusMessage *dbus_exchange_message(DBusMessage *msg) {
msg = dbus_pending_call_steal_reply(pending);
if (NULL == msg) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "returned message is null");
dbus_message_unref(msg);
return NULL;
}
dbus_pending_call_unref(pending);

// check for errors
if (dbus_check_error(msg))
return NULL;
if (dbus_check_error(msg)){
dbus_message_unref(msg);
return NULL;
}

return msg;
}
Expand Down Expand Up @@ -150,14 +156,20 @@ DBusMessageIter* dbus_get_property(
}

dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &interface))
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &interface)){
dbus_message_unref(msg);
return NULL;
}

if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &property))
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &property)){
dbus_message_unref(msg);
return NULL;
}

if (NULL == (msg = dbus_exchange_message(msg)))
if (NULL == (msg = dbus_exchange_message(msg))){
dbus_message_unref(msg);
return NULL;
}

// check type
if (!dbus_message_iter_init(msg, &args)) {
Expand Down Expand Up @@ -207,22 +219,28 @@ int dbus_get_property_string(
interface,
property);

if (NULL == iter)
if (NULL == iter){
zbx_free(iter);
return FAIL;
}

type = dbus_message_iter_get_arg_type(iter);
switch (type) {
case DBUS_TYPE_STRING:
dbus_message_iter_get_basic(iter, &value);
zbx_strlcpy(s, value, n);
zbx_free(iter);
return SUCCEED;

case DBUS_TYPE_BOOLEAN:
dbus_message_iter_get_basic(iter, &value);
zbx_strlcpy(s, yes_no(value), n);
zbx_free(iter);
return SUCCEED;
}

zbx_free(iter);

return FAIL;
}

Expand Down Expand Up @@ -282,6 +300,7 @@ int dbus_marshall_property(

if (NULL == iter) {
SET_MSG_RESULT(result, strdup("failed to get property"));
zbx_free(iter);
return SYSINFO_RET_FAIL;
}

Expand Down Expand Up @@ -332,6 +351,7 @@ int dbus_marshall_property(
return SYSINFO_RET_OK;
}

zbx_free(iter);
SET_MSG_RESULT(result, zbx_dsprintf(NULL, "unsupported value type: %c", type));
return SYSINFO_RET_FAIL;
}
7 changes: 7 additions & 0 deletions src/modules/systemd/libzbxsystemd.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,17 +178,20 @@ static int SYSTEMD_UNIT_DISCOVERY(AGENT_REQUEST *request, AGENT_RESULT *result)

if (NULL == (msg = dbus_exchange_message(msg))) {
SET_MSG_RESULT(result, strdup("failed to list units"));
dbus_message_unref(msg);
return res;
}

// check result message
if (!dbus_message_iter_init(msg, &args)) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "no value returned");
dbus_message_unref(msg);
return res;
}

if (DBUS_TYPE_ARRAY != dbus_message_iter_get_arg_type(&args)) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "returned value is not an array");
dbus_message_unref(msg);
return res;
}

Expand Down Expand Up @@ -420,17 +423,20 @@ static int SYSTEMD_SERVICE_DISCOVERY(AGENT_REQUEST *request, AGENT_RESULT *resul

if (NULL == (msg = dbus_exchange_message(msg))) {
SET_MSG_RESULT(result, strdup("failed to list units"));
dbus_message_unref(msg);
return res;
}

// check result message
if (!dbus_message_iter_init(msg, &args)) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "no value returned");
dbus_message_unref(msg);
return res;
}

if (DBUS_TYPE_ARRAY != dbus_message_iter_get_arg_type(&args)) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "returned value is not an array");
dbus_message_unref(msg);
return res;
}

Expand All @@ -446,6 +452,7 @@ static int SYSTEMD_SERVICE_DISCOVERY(AGENT_REQUEST *request, AGENT_RESULT *resul
dbus_message_iter_next_n(&unit, 6);
if (DBUS_TYPE_INVALID == (type = dbus_message_iter_get_arg_type(&unit))) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "unexpected value type");
dbus_message_unref(msg);
goto next_unit;
}

Expand Down
10 changes: 8 additions & 2 deletions src/modules/systemd/systemd.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,26 @@ int systemd_get_unit(char *s, size_t n, const char* unit)
"GetUnit");

dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &c))
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &c)){
dbus_message_unref(msg);
return FAIL;
}

if (NULL == (msg = dbus_exchange_message(msg)))
if (NULL == (msg = dbus_exchange_message(msg))){
dbus_message_unref(msg);
return FAIL;
}

// read value
if (!dbus_message_iter_init(msg, &args)) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "message has no arguments");
dbus_message_unref(msg);
return FAIL;
}

if (DBUS_TYPE_OBJECT_PATH != (type = dbus_message_iter_get_arg_type(&args))) {
zabbix_log(LOG_LEVEL_ERR, LOG_PREFIX "argument is not an object path: %c", type);
dbus_message_unref(msg);
return FAIL;
}

Expand Down

0 comments on commit c6c2c26

Please sign in to comment.