We didn't loose the callbacks over a reload, but we did loose the limit
settings.
... | ... |
@@ -971,6 +971,8 @@ CLAMAPI void Scan_ReloadDatabase(void) { |
971 | 971 |
while(1) { |
972 | 972 |
unsigned int i; |
973 | 973 |
int ret; |
974 |
+ cl_settings *settings; |
|
975 |
+ |
|
974 | 976 |
if(WaitForSingleObject(reload_event, INFINITE) == WAIT_FAILED) { |
975 | 977 |
logg("!Scan_ReloadDatabase: failed to wait on reload event\n"); |
976 | 978 |
continue; |
... | ... |
@@ -1002,6 +1004,14 @@ CLAMAPI void Scan_ReloadDatabase(void) { |
1002 | 1002 |
unlock_engine(); |
1003 | 1003 |
continue; |
1004 | 1004 |
} |
1005 |
+ settings = cl_engine_settings_copy(engine); |
|
1006 |
+ if (!settings) { |
|
1007 |
+ logg("!Scan_ReloadDatabase: Not enough memory for engine settings\n"); |
|
1008 |
+ unlock_instances(); |
|
1009 |
+ unlock_engine(); |
|
1010 |
+ break; |
|
1011 |
+ } |
|
1012 |
+ |
|
1005 | 1013 |
logg("Scan_ReloadDatabase: Destroying old engine\n"); |
1006 | 1014 |
cl_engine_free(engine); |
1007 | 1015 |
logg("Scan_ReloadDatabase: Loading new engine\n"); |
... | ... |
@@ -1013,15 +1023,8 @@ CLAMAPI void Scan_ReloadDatabase(void) { |
1013 | 1013 |
unlock_engine(); |
1014 | 1014 |
break; |
1015 | 1015 |
} |
1016 |
- cl_engine_set_clcb_pre_scan(engine, prescan_cb); |
|
1017 |
- cl_engine_set_clcb_post_scan(engine, postscan_cb); |
|
1018 |
- |
|
1019 |
- if((ret = cl_engine_set_str(engine, CL_ENGINE_TMPDIR, tmpdir))) { |
|
1020 |
- unlock_instances(); |
|
1021 |
- free_engine_and_unlock(); |
|
1022 |
- logg("!Scan_ReloadDatabase: Failed to set engine tempdir: %s\n", cl_strerror(ret)); |
|
1023 |
- break; |
|
1024 |
- } |
|
1016 |
+ cl_engine_settings_apply(engine, settings); |
|
1017 |
+ cl_engine_settings_free(settings); |
|
1025 | 1018 |
|
1026 | 1019 |
load_db(); /* FIXME: FIAL? */ |
1027 | 1020 |
unlock_instances(); |