Browse code

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

We didn't loose the callbacks over a reload, but we did loose the limit
settings.

Török Edvin authored on 2010/12/10 18:08:21
Showing 1 changed files
... ...
@@ -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();