Skip to content

Commit

Permalink
write_mongodb plugin: Fix BSON memory handling even further.
Browse files Browse the repository at this point in the history
According to the mongo-c-driver 0.8.1 documentation, each call to
bson_alloc() needs to be matched by a call to bson_dealloc() and each
call to bson_init() needs to be matched by a call to bson_destroy().

Additionally, this patch adds macros for mongo-c-driver < 0.8.0 to map
the new bson_alloc() and bson_deallow() names to the old bson_create()
and bson_dispose() symbol names.

Tested with mongo-c-driver 0.8.1 and 0.7.1.

Fixes: #331, #956
  • Loading branch information
octo committed Mar 9, 2015
1 parent 0accb68 commit 2daef0b
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/write_mongodb.c
Expand Up @@ -43,6 +43,11 @@
#endif
#include <mongo.h>

#if (MONGO_MAJOR == 0) && (MONGO_MINOR < 8)
# define bson_alloc() bson_create()
# define bson_dealloc(b) bson_dispose(b)
#endif

struct wm_node_s
{
char name[DATA_MAX_NAME_LEN];
Expand Down Expand Up @@ -74,7 +79,7 @@ static bson *wm_create_bson (const data_set_t *ds, /* {{{ */
gauge_t *rates;
int i;

ret = bson_create ();
ret = bson_alloc (); /* matched by bson_dealloc() */
if (ret == NULL)
{
ERROR ("write_mongodb plugin: bson_create failed.");
Expand All @@ -95,7 +100,7 @@ static bson *wm_create_bson (const data_set_t *ds, /* {{{ */
rates = NULL;
}

bson_init (ret);
bson_init (ret); /* matched by bson_destroy() */
bson_append_date (ret, "time", (bson_date_t) CDTIME_T_TO_MS (vl->time));
bson_append_string (ret, "host", vl->host);
bson_append_string (ret, "plugin", vl->plugin);
Expand Down Expand Up @@ -243,7 +248,8 @@ static int wm_write (const data_set_t *ds, /* {{{ */
pthread_mutex_unlock (&node->lock);

/* free our resource as not to leak memory */
bson_destroy (bson_record);
bson_destroy (bson_record); /* matches bson_init() */
bson_dealloc (bson_record); /* matches bson_alloc() */

return (0);
} /* }}} int wm_write */
Expand Down

0 comments on commit 2daef0b

Please sign in to comment.