Add mechanism to free old leap table

To avoid memory leaks, we add a simple internal mechanism to free the table
of leap seconds if it was previously loaded from disk. The user is still
responsible for freeing their own tables, of course.
This commit is contained in:
Laurence Withers 2009-01-03 19:33:24 +00:00
parent 73df6f836d
commit 394dc40b97
1 changed files with 6 additions and 0 deletions

View File

@ -73,8 +73,13 @@ int iso8601_leap_elapsed(const struct iso8601_date* start, const struct iso8601_
static int leap_table_free_old = 0;
void iso8601_leap_table_set(int* new_table, int new_size) void iso8601_leap_table_set(int* new_table, int new_size)
{ {
if(leap_table_free_old) free(leap_second_days);
leap_table_free_old = 0;
leap_second_days = new_table; leap_second_days = new_table;
leap_second_days_num = new_size; leap_second_days_num = new_size;
} }
@ -133,6 +138,7 @@ int iso8601_leap_table_load(const char* fname)
TEMP_FAILURE_RETRY( close(fd) ); TEMP_FAILURE_RETRY( close(fd) );
iso8601_leap_table_set(days, new_size); iso8601_leap_table_set(days, new_size);
leap_table_free_old = 1;
return 0; return 0;
#undef GET_UINT32 #undef GET_UINT32