From: Florian Forster Date: Mon, 9 Mar 2015 09:59:38 +0000 (+0100) Subject: write_mongodb plugin: Fix BSON memory handling even further. X-Git-Tag: collectd-5.5.0~12^2~13 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=2daef0be77f9a49287432a22ba0d04494602588d;p=collectd.git write_mongodb plugin: Fix BSON memory handling even further. 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 --- diff --git a/src/write_mongodb.c b/src/write_mongodb.c index a12bdd01..24151ceb 100644 --- a/src/write_mongodb.c +++ b/src/write_mongodb.c @@ -43,6 +43,11 @@ #endif #include +#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]; @@ -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."); @@ -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); @@ -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 */