Selaa lähdekoodia

Enabled `DB_OPT_RELEASE_DATA` for several `DBMap`s to simplify data freeing.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15644 54d463be-8e91-2dee-dedb-b68131a5f0ec
gepard1984 13 vuotta sitten
vanhempi
commit
17bb9ae684
4 muutettua tiedostoa jossa 20 lisäystä ja 59 poistoa
  1. 5 11
      src/map/guild.c
  2. 2 12
      src/map/pc_groups.c
  3. 9 23
      src/map/script.c
  4. 4 13
      src/map/skill.c

+ 5 - 11
src/map/guild.c

@@ -1914,12 +1914,6 @@ bool guild_isallied(int guild_id, int guild_id2)
 	return( i < MAX_GUILDALLIANCE && g->alliance[i].opposition == 0 );
 }
 
-static int guild_infoevent_db_final(DBKey key,void *data,va_list ap)
-{
-	aFree(data);
-	return 0;
-}
-
 static int guild_expcache_db_final(DBKey key,void *data,va_list ap)
 {
 	ers_free(expcache_ers, data);
@@ -1940,9 +1934,9 @@ void do_init_guild(void)
 	guild_db=idb_alloc(DB_OPT_RELEASE_DATA);
 	castle_db=idb_alloc(DB_OPT_BASE);
 	guild_expcache_db=idb_alloc(DB_OPT_BASE);
-	guild_infoevent_db=idb_alloc(DB_OPT_BASE);
+	guild_infoevent_db=idb_alloc(DB_OPT_BASE|DB_OPT_RELEASE_DATA);
 	expcache_ers = ers_new(sizeof(struct guild_expcache)); 
-	guild_castleinfoevent_db=idb_alloc(DB_OPT_BASE);
+	guild_castleinfoevent_db=idb_alloc(DB_OPT_BASE|DB_OPT_RELEASE_DATA);
 
 	sv_readdb(db_path, "castle_db.txt", ',', 4, 5, -1, &guild_read_castledb);
 
@@ -1957,10 +1951,10 @@ void do_init_guild(void)
 
 void do_final_guild(void)
 {
-	guild_db->destroy(guild_db,NULL);
+	db_destroy(guild_db);
 	castle_db->destroy(castle_db,guild_castle_db_final);
 	guild_expcache_db->destroy(guild_expcache_db,guild_expcache_db_final);
-	guild_infoevent_db->destroy(guild_infoevent_db,guild_infoevent_db_final);
-	guild_castleinfoevent_db->destroy(guild_castleinfoevent_db,guild_infoevent_db_final);
+	db_destroy(guild_infoevent_db);
+	db_destroy(guild_castleinfoevent_db);
 	ers_destroy(expcache_ers);
 }

+ 2 - 12
src/map/pc_groups.c

@@ -422,21 +422,11 @@ int pc_group_id2level(int group_id)
  */
 void do_init_pc_groups(void)
 {
-	pc_group_db = idb_alloc(DB_OPT_BASE);
+	pc_group_db = idb_alloc(DB_OPT_RELEASE_DATA);
 	pc_groupname_db = stridb_alloc(DB_OPT_DUP_KEY, 0);
 	read_config();
 }
 
-/**
- * DBApply helper function for do_final_pc_groups
- * @private
- */
-static int group_db_free(DBKey key, void *data, va_list args)
-{
-	aFree((GroupSettings*)data);
-	return 1;
-}
-
 /**
  * Finalize PC Groups: free DBMaps and config.
  * @public
@@ -444,7 +434,7 @@ static int group_db_free(DBKey key, void *data, va_list args)
 void do_final_pc_groups(void)
 {
 	if (pc_group_db != NULL)
-		pc_group_db->destroy(pc_group_db, group_db_free);
+		db_destroy(pc_group_db);
 	if (pc_groupname_db != NULL )
 		db_destroy(pc_groupname_db);
 	destroy_config();

+ 9 - 23
src/map/script.c

@@ -3634,24 +3634,10 @@ int script_config_read(char *cfgName)
 	return 0;
 }
 
-static int do_final_userfunc_sub (DBKey key,void *data,va_list ap)
+static int db_script_free_code_sub(DBKey key, void *data, va_list ap)
 {
-	struct script_code *code = (struct script_code *)data;
-	if(code){
-		script_free_vars( &code->script_vars );
-		aFree( code->script_buf );
-		aFree( code );
-	}
-	return 0;
-}
-
-static int do_final_autobonus_sub (DBKey key,void *data,va_list ap)
-{
-	struct script_code *script = (struct script_code *)data;
-
-	if( script )
-		script_free_code(script);
-
+	if (data)
+		script_free_code(data);
 	return 0;
 }
 
@@ -3807,9 +3793,9 @@ int do_final_script()
 
 	mapreg_final();
 
-	scriptlabel_db->destroy(scriptlabel_db,NULL);
-	userfunc_db->destroy(userfunc_db,do_final_userfunc_sub);
-	autobonus_db->destroy(autobonus_db, do_final_autobonus_sub);
+	db_destroy(scriptlabel_db);
+	userfunc_db->destroy(userfunc_db, db_script_free_code_sub);
+	autobonus_db->destroy(autobonus_db, db_script_free_code_sub);
 	if(sleep_db) {
 		struct linkdb_node *n = (struct linkdb_node *)sleep_db;
 		while(n) {
@@ -3833,7 +3819,7 @@ int do_final_script()
 int do_init_script()
 {
 	userfunc_db=strdb_alloc(DB_OPT_DUP_KEY,0);
-	scriptlabel_db=strdb_alloc((DBOptions)(DB_OPT_DUP_KEY|DB_OPT_ALLOW_NULL_DATA),50);
+	scriptlabel_db=strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_ALLOW_NULL_DATA,50);
 	autobonus_db = strdb_alloc(DB_OPT_DUP_KEY,0);
 
 	mapreg_init();
@@ -3843,8 +3829,8 @@ int do_init_script()
 
 int script_reload()
 {
-	userfunc_db->clear(userfunc_db,do_final_userfunc_sub);
-	scriptlabel_db->clear(scriptlabel_db, NULL);
+	userfunc_db->clear(userfunc_db, db_script_free_code_sub);
+	db_clear(scriptlabel_db);
 
 	if(sleep_db) {
 		struct linkdb_node *n = (struct linkdb_node *)sleep_db;

+ 4 - 13
src/map/skill.c

@@ -14723,10 +14723,9 @@ int skill_blockpc_end(int tid, unsigned int tick, int id, intptr_t data)
 			}
 			cursor++;
 		}
-		if( cursor == 0 ) {
+		if( cursor == 0 )
 			idb_remove(skillcd_db,sd->status.char_id);
-			aFree(cd);
-		} else
+		else
 			cd->cursor = cursor;
 	}
 
@@ -15688,7 +15687,7 @@ int do_init_skill (void)
 
 	group_db = idb_alloc(DB_OPT_BASE);
 	skillunit_db = idb_alloc(DB_OPT_BASE);
-	skillcd_db = idb_alloc(DB_OPT_BASE);
+	skillcd_db = idb_alloc(DB_OPT_RELEASE_DATA);
 	skill_unit_ers = ers_new(sizeof(struct skill_unit_group));
 	skill_timer_ers  = ers_new(sizeof(struct skill_timerskill));
 
@@ -15703,20 +15702,12 @@ int do_init_skill (void)
 	return 0;
 }
 
-int skillcd_db_final(DBKey key, void *data, va_list args)
-{
-	struct skillcd *s = (struct skillcd*)data;
-	if( s != NULL)
-		aFree(s);
-	return 0;
-}
-
 int do_final_skill(void)
 {
 	db_destroy(skilldb_name2id);
 	db_destroy(group_db);
 	db_destroy(skillunit_db);
-	skillcd_db->destroy(skillcd_db, skillcd_db_final);
+	db_destroy(skillcd_db);
 	ers_destroy(skill_unit_ers);
 	ers_destroy(skill_timer_ers);
 	return 0;