some memory leakage fixes
This commit is contained in:
parent
b244466563
commit
e02ae5d350
@ -1,3 +1,3 @@
|
|||||||
SUBDIRS = libsmmapdfw smmapd verify_worker test_worker cyrus_worker doc m4
|
SUBDIRS = libsmmapdfw verify_worker test_worker cyrus_worker smmapd doc m4
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ RC = @RC@
|
|||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
|
||||||
SUBDIRS = libsmmapdfw smmapd verify_worker test_worker cyrus_worker doc m4
|
SUBDIRS = libsmmapdfw verify_worker test_worker cyrus_worker smmapd doc m4
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
CONFIG_HEADER = config.h
|
CONFIG_HEADER = config.h
|
||||||
|
@ -230,7 +230,10 @@ int unregister_all() {
|
|||||||
classes = classes->next;
|
classes = classes->next;
|
||||||
|
|
||||||
unregister_class(cf);
|
unregister_class(cf);
|
||||||
dlclose(cf->dl_handle);
|
|
||||||
|
if (NULL != cf->dl_handle)
|
||||||
|
dlclose(cf->dl_handle);
|
||||||
|
|
||||||
free(cf);
|
free(cf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,10 +244,10 @@ int register_all() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int register_worker(char *worker_name) {
|
int register_worker(char *worker_name) {
|
||||||
void *dl_handle;
|
void *dl_handle = NULL;
|
||||||
class_descriptor_t * class_descriptor;
|
class_descriptor_t * class_descriptor = NULL;
|
||||||
char *cfg_plugin_dir, *cfg_plugins, *cfg_plugin, *cfg_obj, *cfg_plugin_name;
|
char *cfg_plugin_dir, *cfg_plugins, *cfg_plugin, *cfg_obj, *cfg_plugin_name;
|
||||||
char *obj_name;
|
char *obj_name = NULL;
|
||||||
const char *err_msg;
|
const char *err_msg;
|
||||||
int err;
|
int err;
|
||||||
int id = 0;
|
int id = 0;
|
||||||
|
@ -403,8 +403,8 @@ int server() {
|
|||||||
}
|
}
|
||||||
#endif /* ENABLE_NETSNMP */
|
#endif /* ENABLE_NETSNMP */
|
||||||
|
|
||||||
while (getStatCounter(globalStatCounter, STAT_CNT_ACCEPTED) < 3) {
|
// while (getStatCounter(globalStatCounter, STAT_CNT_ACCEPTED) < 1000) {
|
||||||
// while (1) {
|
while (1) {
|
||||||
syslog(LOG_DEBUG, "server: Waiting for connection");
|
syslog(LOG_DEBUG, "server: Waiting for connection");
|
||||||
|
|
||||||
clientSock = accept(serverSock, (struct sockaddr *) &clientAddr, &clientAddrLen);
|
clientSock = accept(serverSock, (struct sockaddr *) &clientAddr, &clientAddrLen);
|
||||||
|
@ -162,6 +162,7 @@ struct worker_thread_s {
|
|||||||
int checker_cnt;
|
int checker_cnt;
|
||||||
ht_queue_t *terminator_queue;
|
ht_queue_t *terminator_queue;
|
||||||
verify_work_handle_t *vwh;
|
verify_work_handle_t *vwh;
|
||||||
|
char* rememberPropagatedOutput;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct worker_thread_s worker_thread_t;
|
typedef struct worker_thread_s worker_thread_t;
|
||||||
@ -315,6 +316,9 @@ int verify_work_destroy(void *handle, void *work_handle) {
|
|||||||
|
|
||||||
queue_destroy(wt->checker_terminator_queue);
|
queue_destroy(wt->checker_terminator_queue);
|
||||||
free(wt->checker_terminator_queue);
|
free(wt->checker_terminator_queue);
|
||||||
|
|
||||||
|
if (NULL != wt->rememberPropagatedOutput)
|
||||||
|
free(wt->rememberPropagatedOutput);
|
||||||
|
|
||||||
free(wt);
|
free(wt);
|
||||||
|
|
||||||
@ -470,6 +474,7 @@ int verify_work(void *handle, void *work_handle, char *input, htbuffer_t *output
|
|||||||
wt->mutex = vwh->result_mutex;
|
wt->mutex = vwh->result_mutex;
|
||||||
wt->cond = vwh->result_cond;
|
wt->cond = vwh->result_cond;
|
||||||
wt->result = vwh->result;
|
wt->result = vwh->result;
|
||||||
|
wt->rememberPropagatedOutput = NULL;
|
||||||
wt->checker_terminator_queue = (ht_queue_t*) htmalloc(sizeof(ht_queue_t));
|
wt->checker_terminator_queue = (ht_queue_t*) htmalloc(sizeof(ht_queue_t));
|
||||||
queue_init(wt->checker_terminator_queue);
|
queue_init(wt->checker_terminator_queue);
|
||||||
wt->checker_cnt = 0;
|
wt->checker_cnt = 0;
|
||||||
@ -505,7 +510,9 @@ int verify_work(void *handle, void *work_handle, char *input, htbuffer_t *output
|
|||||||
// snprintf(output, ANSWER_BUFSIZE, vwh->result->output);
|
// snprintf(output, ANSWER_BUFSIZE, vwh->result->output);
|
||||||
htbuffer_strcpy(output, vwh->result->output);
|
htbuffer_strcpy(output, vwh->result->output);
|
||||||
|
|
||||||
free(vwh->result->output);
|
/* this belongs to the worker thread, it will be freed when the worker thread is cleaned up */
|
||||||
|
/* free(vwh->result->output); */
|
||||||
|
/* vwh->result->output = NULL; */
|
||||||
|
|
||||||
return vwh->result->result;
|
return vwh->result->result;
|
||||||
}
|
}
|
||||||
@ -842,6 +849,7 @@ static void *worker_thread(void *arg) {
|
|||||||
/* we can write the result */
|
/* we can write the result */
|
||||||
wt->result->output = (char*) htmalloc(sizeof(char) * (strlen(wt->output)+15)); /* enough for the output
|
wt->result->output = (char*) htmalloc(sizeof(char) * (strlen(wt->output)+15)); /* enough for the output
|
||||||
plus <><> and prefix */
|
plus <><> and prefix */
|
||||||
|
wt->rememberPropagatedOutput = wt->result->output;
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case SMM_LOCAL_TEMP_NOK:
|
case SMM_LOCAL_TEMP_NOK:
|
||||||
sprintf(wt->result->output, "<TNOK><%s>", wt->output);
|
sprintf(wt->result->output, "<TNOK><%s>", wt->output);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user