c4w: preserve limit settings over reload (bb #2419).

We didn't loose the callbacks over a reload, but we did loose the limit
settings.
remotes/push_mirror/multihash
Török Edvin 15 years ago
parent df6ce9ab41
commit eebe17b22a
  1. 21
      win32/clamav-for-windows/clamav-for-windows/interface.c

@ -971,6 +971,8 @@ CLAMAPI void Scan_ReloadDatabase(void) {
while(1) { while(1) {
unsigned int i; unsigned int i;
int ret; int ret;
cl_settings *settings;
if(WaitForSingleObject(reload_event, INFINITE) == WAIT_FAILED) { if(WaitForSingleObject(reload_event, INFINITE) == WAIT_FAILED) {
logg("!Scan_ReloadDatabase: failed to wait on reload event\n"); logg("!Scan_ReloadDatabase: failed to wait on reload event\n");
continue; continue;
@ -1002,6 +1004,14 @@ CLAMAPI void Scan_ReloadDatabase(void) {
unlock_engine(); unlock_engine();
continue; continue;
} }
settings = cl_engine_settings_copy(engine);
if (!settings) {
logg("!Scan_ReloadDatabase: Not enough memory for engine settings\n");
unlock_instances();
unlock_engine();
break;
}
logg("Scan_ReloadDatabase: Destroying old engine\n"); logg("Scan_ReloadDatabase: Destroying old engine\n");
cl_engine_free(engine); cl_engine_free(engine);
logg("Scan_ReloadDatabase: Loading new engine\n"); logg("Scan_ReloadDatabase: Loading new engine\n");
@ -1013,15 +1023,8 @@ CLAMAPI void Scan_ReloadDatabase(void) {
unlock_engine(); unlock_engine();
break; break;
} }
cl_engine_set_clcb_pre_scan(engine, prescan_cb); cl_engine_settings_apply(engine, settings);
cl_engine_set_clcb_post_scan(engine, postscan_cb); cl_engine_settings_free(settings);
if((ret = cl_engine_set_str(engine, CL_ENGINE_TMPDIR, tmpdir))) {
unlock_instances();
free_engine_and_unlock();
logg("!Scan_ReloadDatabase: Failed to set engine tempdir: %s\n", cl_strerror(ret));
break;
}
load_db(); /* FIXME: FIAL? */ load_db(); /* FIXME: FIAL? */
unlock_instances(); unlock_instances();

Loading…
Cancel
Save