Fix Valgrind. Fix bug with clamd reloading database, forcing a stats submission.

remotes/push_mirror/0.98.2
Shawn Webb 11 years ago
parent e6786fef39
commit e6bcbd5add
  1. 3
      libclamav/matcher.c
  2. 10
      libclamav/others.c
  3. 10
      libclamav/readdb.c
  4. 21
      libclamav/stats.c

@ -546,6 +546,9 @@ int cli_checkfp(unsigned char *digest, size_t size, cli_ctx *ctx)
if (ctx->engine->cb_stats_add_sample)
ctx->engine->cb_stats_add_sample(cli_get_last_virus(ctx), digest, size, &sections, ctx->engine->stats_data);
if (sections.sections)
free(sections.sections);
return CL_VIRUS;
}

@ -699,7 +699,6 @@ struct cl_settings *cl_engine_settings_copy(const struct cl_engine *engine)
settings->cb_meta = engine->cb_meta;
settings->engine_options = engine->engine_options;
settings->stats_data = engine->stats_data;
settings->cb_stats_add_sample = engine->cb_stats_add_sample;
settings->cb_stats_remove_sample = engine->cb_stats_remove_sample;
settings->cb_stats_decrement_count = engine->cb_stats_decrement_count;
@ -714,6 +713,8 @@ struct cl_settings *cl_engine_settings_copy(const struct cl_engine *engine)
int cl_engine_settings_apply(struct cl_engine *engine, const struct cl_settings *settings)
{
cli_intel_t *intel;
engine->ac_only = settings->ac_only;
engine->ac_mindepth = settings->ac_mindepth;
engine->ac_maxdepth = settings->ac_maxdepth;
@ -762,7 +763,12 @@ int cl_engine_settings_apply(struct cl_engine *engine, const struct cl_settings
engine->cb_hash = settings->cb_hash;
engine->cb_meta = settings->cb_meta;
engine->stats_data = settings->stats_data;
intel = (cli_intel_t *)cli_calloc(1, sizeof(cli_intel_t));
intel->engine = engine;
intel->maxsamples = STATS_MAX_SAMPLES;
intel->maxmem = STATS_MAX_MEM;
engine->stats_data = (void *)intel;
engine->cb_stats_add_sample = settings->cb_stats_add_sample;
engine->cb_stats_remove_sample = settings->cb_stats_remove_sample;
engine->cb_stats_decrement_count = settings->cb_stats_decrement_count;

@ -3241,9 +3241,17 @@ int cl_engine_free(struct cl_engine *engine)
engine->cb_stats_submit(engine, engine->stats_data);
#ifdef CL_THREAD_SAFE
pthread_mutex_destroy(&(((cli_intel_t *)(engine->stats_data))->mutex));
if (engine->stats_data) {
cli_intel_t *intel = (cli_intel_t *)(engine->stats_data);
pthread_mutex_destroy(&(intel->mutex));
}
pthread_mutex_unlock(&cli_ref_mutex);
#endif
if (engine->stats_data)
free(engine->stats_data);
if(engine->root) {
for(i = 0; i < CLI_MTARGETS; i++) {
if((root = engine->root[i])) {

@ -216,8 +216,16 @@ void clamav_stats_add_sample(const char *virname, const unsigned char *md5, size
if (sections && sections->nsections && !(sample->sections)) {
/* Copy the section data that has already been allocated. We don't care if calloc fails; just skip copying if it does. */
sample->sections = calloc(1, sizeof(stats_section_t));
if ((sample->sections))
memcpy(sample->sections, sections, sizeof(stats_section_t));
if ((sample->sections)) {
sample->sections->sections = calloc(sections->nsections, sizeof(struct cli_section_hash));
if ((sample->sections->sections)) {
memcpy(sample->sections->sections, sections->sections, sections->nsections * sizeof(struct cli_section_hash));
sample->sections->nsections = sections->nsections;
} else {
free(sample->sections);
sample->sections = NULL;
}
}
}
}
@ -261,6 +269,10 @@ void clamav_stats_flush(struct cl_engine *engine, void *cbdata)
intel->samples = NULL;
intel->nsamples = 0;
if (intel->hostid) {
free(intel->hostid);
intel->hostid = NULL;
}
#ifdef CL_THREAD_SAFE
err = pthread_mutex_unlock(&(intel->mutex));
@ -347,6 +359,11 @@ void clamav_stats_submit(struct cl_engine *engine, void *cbdata)
submit_post(STATS_HOST, STATS_PORT, "PUT", "/clamav/1/submit/stats", json);
free(json);
}
if (myintel.hostid && !(intel->hostid)) {
free(myintel.hostid);
myintel.hostid = NULL;
}
}
void clamav_stats_remove_sample(const char *virname, const unsigned char *md5, size_t size, void *cbdata)

Loading…
Cancel
Save