Skip to content

Commit 2b54ff1

Browse files
author
Marius Sturm
committed
allocate dedicated memory for json message. improve connection cleanup
1 parent 97109ab commit 2b54ff1

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

src/mod_log_gelf.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
#define DEFAULT_LOG_FMT "ABDhmsvRti"
1818
#define UDP 0
1919
#define TCP 1
20-
#define RECONNECT_INTERVAL 120000000
20+
//#define RECONNECT_INTERVAL 120000000 // reconnect every 2min
21+
#define RECONNECT_INTERVAL 0
2122
#define MIN_CONNECTIONS 1
22-
#define MAX_CONNECTIONS 5
23+
#define MAX_CONNECTIONS 3
2324
#define SEND_BUFFER 1048576
2425

2526
module AP_MODULE_DECLARE_DATA log_gelf_module;
@@ -406,10 +407,11 @@ static int log_gelf_transaction(request_rec *request) {
406407
}
407408

408409
char* json = log_gelf_make_json(request);
410+
409411
if (config->protocol == TCP) {
410412
/* allocate memory for actual log message */
411413
tdata = apr_palloc(request->pool, sizeof(transferData));
412-
memset(tdata, 0, sizeof(transferData));
414+
memset(tdata, '\0', sizeof(transferData));
413415
tdata->data = json;
414416
tdata->size = strlen(json);
415417
log_gelf_send_message_tcp(tdata, request);
@@ -454,12 +456,14 @@ char * log_gelf_make_json(request_rec *request) {
454456
}
455457

456458
/* get json string */
457-
const char * str = json_object_to_json_string_ext(object, JSON_C_TO_STRING_PLAIN);
459+
const char * json_str = json_object_to_json_string_ext(object, JSON_C_TO_STRING_PLAIN);
460+
char *result = apr_pcalloc(request->pool, strlen(json_str)+1);
461+
apr_cpystrn(result, json_str, strlen(json_str)+1);
458462

459463
/* free temporary json object */
460464
json_object_put(object);
461465

462-
return apr_pstrdup(request->pool, str);
466+
return result;
463467
}
464468

465469
json_object * json_add_string(json_object *jobj, const char *key, const char *value) {
@@ -490,7 +494,7 @@ transferData* log_gelf_zlib_compress(const char *line, request_rec *request) {
490494
void * buf = apr_palloc(request->pool, len);
491495

492496
strm = apr_palloc(request->pool, sizeof(z_stream));
493-
memset(strm, 0, sizeof(z_stream));
497+
memset(strm, '\0', sizeof(z_stream));
494498
strm->zalloc = Z_NULL;
495499
strm->zfree = Z_NULL;
496500
strm->opaque = Z_NULL;
@@ -518,7 +522,7 @@ transferData* log_gelf_zlib_compress(const char *line, request_rec *request) {
518522

519523
/* create data to transfer */
520524
transferData * ret = apr_palloc(request->pool, sizeof(transferData));
521-
memset(ret, 0, sizeof(transferData));
525+
memset(ret, '\0', sizeof(transferData));
522526
ret->data = buf;
523527
ret->size = csize;
524528

@@ -593,9 +597,9 @@ void log_gelf_send_message_tcp(const transferData* payload, request_rec *request
593597
"mod_log_gelf: Error writing to socket %d bytes. Error %s",
594598
payload->size, apr_strerror(rv, errbuf, sizeof(errbuf)));
595599
apr_reslist_invalidate(config->connection_pool, con) ;
600+
} else {
601+
log_gelf_connection_release(request, con);
596602
}
597-
598-
log_gelf_connection_release(request, con);
599603
}
600604

601605
double log_gelf_get_timestamp() {

0 commit comments

Comments
 (0)