diff --git a/src/mod/applications/mod_mongo/mod_mongo.cpp b/src/mod/applications/mod_mongo/mod_mongo.cpp index d76e885765..bb82c840e0 100644 --- a/src/mod/applications/mod_mongo/mod_mongo.cpp +++ b/src/mod/applications/mod_mongo/mod_mongo.cpp @@ -27,17 +27,26 @@ SWITCH_STANDARD_API(mongo_find_one_function) if (!zstr(ns) && !zstr(json_query) && !zstr(json_fields)) { + DBClientConnection *conn = NULL; + try { BSONObj query = fromjson(json_query); BSONObj fields = fromjson(json_fields); - DBClientConnection *conn = mongo_connection_pool_get(globals.conn_pool); - BSONObj res = conn->findOne(ns, Query(query), &fields); - mongo_connection_pool_put(globals.conn_pool, conn); + conn = mongo_connection_pool_get(globals.conn_pool); + if (conn) { + BSONObj res = conn->findOne(ns, Query(query), &fields); + mongo_connection_pool_put(globals.conn_pool, conn); - stream->write_function(stream, "-OK\n%s\n", res.toString().c_str()); - } catch (MsgAssertionException &e) { - stream->write_function(stream, "-ERR\n%s\n", e.what()); + stream->write_function(stream, "-OK\n%s\n", res.toString().c_str()); + } else { + stream->write_function(stream, "-ERR\nNo connection\n"); + } + } catch (DBException &e) { + if (conn) { + mongo_connection_destroy(&conn); + } + stream->write_function(stream, "-ERR\n%s\n", e.toString().c_str()); } diff --git a/src/mod/applications/mod_mongo/mod_mongo.h b/src/mod/applications/mod_mongo/mod_mongo.h index 5d2ed54dcb..91c14bb29b 100644 --- a/src/mod/applications/mod_mongo/mod_mongo.h +++ b/src/mod/applications/mod_mongo/mod_mongo.h @@ -22,6 +22,9 @@ typedef struct { } mongo_connection_pool_t; +switch_status_t mongo_connection_create(DBClientConnection **connection, const char *host); +void mongo_connection_destroy(DBClientConnection **conn); + switch_status_t mongo_connection_pool_create(mongo_connection_pool_t **conn_pool, switch_size_t min_connections, switch_size_t max_connections, const char *host); void mongo_connection_pool_destroy(mongo_connection_pool_t **conn_pool);