Skip to content

Commit

Permalink
Memory handling improvements.
Browse files Browse the repository at this point in the history
  • Loading branch information
mmichalek committed Nov 9, 2015
1 parent ff41bf2 commit c55a586
Show file tree
Hide file tree
Showing 14 changed files with 53 additions and 28 deletions.
17 changes: 16 additions & 1 deletion symmetric-client-clib-test/src/util/MapTest.c
Expand Up @@ -288,6 +288,19 @@ void SymMapTest_testKeysMultiValue() {
}
}

void SymMapTest_testRemove() {
int mapSize = 16;
SymMap *map = SymMap_new(NULL, mapSize);
int i;
for (i = 0; i < mapSize; i++) {
map->put(map, SymStringUtils_format("%d", i), SymStringUtils_format("value %d", i));
}
for (i = 0; i < mapSize; i++) {
map->remove(map, SymStringUtils_format("%d", i));
}

map->remove(map, "1");
}

int SymMapTest_CUnit() {
CU_pSuite suite = CU_add_suite("SymMapTest", NULL, NULL);
Expand All @@ -306,7 +319,9 @@ int SymMapTest_CUnit() {
CU_add_test(suite, "SymMapTest_testEntriesMultiValue", SymMapTest_testEntriesMultiValue) == NULL ||
CU_add_test(suite, "SymMapTest_testKeysEmpty", SymMapTest_testKeysEmpty) == NULL ||
CU_add_test(suite, "SymMapTest_testKeysSingleValue", SymMapTest_testKeysSingleValue) == NULL ||
CU_add_test(suite, "SymMapTest_testKeysMultiValue", SymMapTest_testKeysMultiValue) == NULL
CU_add_test(suite, "SymMapTest_testKeysMultiValue", SymMapTest_testKeysMultiValue) == NULL ||
CU_add_test(suite, "SymMapTest_testRemove", SymMapTest_testRemove) == NULL ||
1==0

) {
return CUE_NOTEST;
Expand Down
1 change: 0 additions & 1 deletion symmetric-client-clib/inc/db/sqlite/SqliteSqlTransaction.h
Expand Up @@ -35,7 +35,6 @@ typedef struct SymSqliteSqlTransaction {
sqlite3_stmt *stmt;
char *sql;
unsigned short inTransaction;
void (*destroy)(struct SymSqliteSqlTransaction *this);
} SymSqliteSqlTransaction;

SymSqliteSqlTransaction * SymSqliteSqlTransaction_new(SymSqliteSqlTransaction *this, SymSqliteSqlTemplate *sqlTemplate);
Expand Down
1 change: 1 addition & 0 deletions symmetric-client-clib/inc/model/Trigger.h
Expand Up @@ -76,5 +76,6 @@ typedef struct SymTrigger {
} SymTrigger;

SymTrigger * SymTrigger_new(SymTrigger *this);
void SymTrigger_destroy(SymTrigger *this);

#endif /* SYM_MODEL_TRIGGER_H */
2 changes: 2 additions & 0 deletions symmetric-client-clib/inc/model/TriggerHistory.h
Expand Up @@ -65,4 +65,6 @@ SymTriggerHistory * SymTriggerHistory_new(SymTriggerHistory *this);

SymTriggerHistory * SymTriggerHistory_newWithId(SymTriggerHistory *this, int triggerHistoryId);

void SymTriggerHistory_destroy(SymTriggerHistory *this);

#endif
1 change: 1 addition & 0 deletions symmetric-client-clib/inc/model/TriggerRouter.h
Expand Up @@ -46,5 +46,6 @@ typedef struct SymTriggerRouter {
} SymTriggerRouter;

SymTriggerRouter * SymTriggerRouter_new(SymTriggerRouter *this);
void SymTriggerRouter_destroy(SymTriggerRouter *this);

#endif
1 change: 1 addition & 0 deletions symmetric-client-clib/src/core/SymEngine.c
Expand Up @@ -149,6 +149,7 @@ void SymEngine_destroy(SymEngine *this) {
this->dataService->destroy(this->dataService);
this->nodeService->destroy(this->nodeService);
this->parameterService->destroy(this->parameterService);
this->sequenceService->destroy(this->sequenceService);
free(this);
}

Expand Down
8 changes: 4 additions & 4 deletions symmetric-client-clib/src/db/model/Table.c
Expand Up @@ -179,10 +179,10 @@ SymList * SymTable_getPrimaryKeyColumns(SymTable *this) {
}

void SymTable_destroy(SymTable *this) {
free(this->name);
free(this->catalog);
free(this->schema);
this->columns->destroy(this->columns);
// free(this->name); probably stack memory.
// free(this->catalog);
// free(this->schema);
this->columns->destroyAll(this->columns, (void *)SymColumn_destroy);
free(this);
}

Expand Down
Expand Up @@ -144,6 +144,6 @@ SymSqliteSqlTransaction * SymSqliteSqlTransaction_new(SymSqliteSqlTransaction *t
super->commit = (void *) &SymSqliteSqlTransaction_commit;
super->rollback = (void *) &SymSqliteSqlTransaction_rollback;
super->close = (void *) &SymSqliteSqlTransaction_close;
this->destroy = (void *) &SymSqliteSqlTransaction_destroy;
super->destroy = (void *) &SymSqliteSqlTransaction_destroy;
return this;
}
6 changes: 6 additions & 0 deletions symmetric-client-clib/src/model/Channel.c
Expand Up @@ -21,6 +21,12 @@
#include "model/Channel.h"

void SymChannel_destroy(SymChannel *this) {
if (this->createTime) {
free(this->createTime);
}
if (this->lastUpdateTime) {
free(this->lastUpdateTime);
}
free(this);
}

Expand Down
6 changes: 0 additions & 6 deletions symmetric-client-clib/src/model/Sequence.c
Expand Up @@ -21,15 +21,9 @@
#include "model/Sequence.h"

void SymSequence_destroy(SymSequence *this) {
if (this->sequenceName) {
free(this->sequenceName);
}
if (this->createTime) {
this->createTime->destroy(this->createTime);
}
if (this->lastUpdateBy) {
free(this->lastUpdateBy);
}
if (this->lastUpdateTime) {
this->lastUpdateTime->destroy(this->lastUpdateTime);
}
Expand Down
2 changes: 1 addition & 1 deletion symmetric-client-clib/src/model/TriggerHistory.c
Expand Up @@ -65,7 +65,7 @@ void SymTriggerHistory_destroy(SymTriggerHistory *this) {
// Being selective here based on Valgrind reports and testing that
// shows other fields are static memory or really owned by someone else.
if (this->sourceTableName) {
free(this->sourceTableName);
// free(this->sourceTableName);
}
if (this->nameForInsertTrigger) {
free(this->nameForInsertTrigger);
Expand Down
5 changes: 3 additions & 2 deletions symmetric-client-clib/src/service/RouterService.c
Expand Up @@ -216,7 +216,7 @@ static int SymRouterService_routeDataForChannel(SymRouterService *this, SymChann
context->statInsertDataEventsMs += ((time(NULL) - insertTs) * 1000);
}

// sqlTrans->destroy(sqlTrans);
sqlTrans->destroy(sqlTrans);
context->destroy(context);
return dataCount;
}
Expand All @@ -237,7 +237,8 @@ static int SymRouterService_routeDataForEachChannel(SymRouterService *this) {
}
iter->destroy(iter);
channelList->destroy(channelList);
channels->destroy(channels);
// channels->destroy(channels);
channels->destroyAll(channels, (void *)SymChannel_destroy);
return dataCount;
}

Expand Down
24 changes: 13 additions & 11 deletions symmetric-client-clib/src/service/TriggerRouterService.c
Expand Up @@ -306,11 +306,7 @@ static SymList * buildTriggersForSymmetricTables(SymTriggerRouterService *this,
triggers->add(triggers, trigger);
}

if (definedTriggers->size > 0) {
definedTriggers->destroyAll(definedTriggers, (void *)((SymTrigger*)triggers->head)->destroy);
} else {
definedTriggers->destroy(definedTriggers);
}
definedTriggers->destroyAll(definedTriggers, (void *)SymTrigger_destroy);

tables->destroy(tables);
iter->destroy(iter);
Expand Down Expand Up @@ -404,7 +400,10 @@ SymTriggerHistory * SymTriggerRouterService_getNewestTriggerHistoryForTrigger(Sy
}

args->destroy(args);
triggerHistories->destroyAll(triggerHistories, (void *) result->destroy);
if (result) {
triggerHistories->destroyAll(triggerHistories, (void *) result->destroy);
}


return result;
}
Expand Down Expand Up @@ -512,7 +511,7 @@ SymList * SymTriggerRouterService_getTriggersToSync(SymTriggerRouterService *thi
}
}

triggerRouters->destroy(triggerRouters);
triggerRouters->destroyAll(triggerRouters, (void *)SymTriggerRouter_destroy);

return triggers;
}
Expand Down Expand Up @@ -615,7 +614,9 @@ char * SymTriggerRouterService_getTriggerName(SymTriggerRouterService *this, Sym
// triggerSuffix2 = replaceCharsToShortenName(table.getName());
// }

char *triggerSuffix3 = SymTriggerRouterService_replaceCharsToShortenName(this, SymStringUtils_format("%s%s", "_", this->parameterService->getNodeGroupId(this->parameterService)));
char* triggerSuffix3Temp = SymStringUtils_format("%s%s", "_", this->parameterService->getNodeGroupId(this->parameterService));
char *triggerSuffix3 = SymTriggerRouterService_replaceCharsToShortenName(this, triggerSuffix3Temp);
free(triggerSuffix3Temp);

triggerName = SymStringUtils_format("%s%s%s%s",
triggerPrefix1, triggerSuffix1, triggerSuffix2, triggerSuffix3);
Expand Down Expand Up @@ -854,15 +855,16 @@ void SymTriggerRouterService_syncTriggers(SymTriggerRouterService *this, unsigne
trigger->sourceCatalogName, trigger->sourceSchemaName, trigger->sourceTableName, 1);
if (table) {
SymTriggerRouterService_updateOrCreateDatabaseTriggers(this, trigger, table, activeTriggerHistories, force);
table->destroy(table); // TODO should not do this when the the cache is fully implemented.
}
else {
SymLog_error("No table '%s' found for trigger. ", trigger->sourceTableName);
}
}

symmetricTableTriggers->destroy(symmetricTableTriggers);
triggers->destroy(triggers);
activeTriggerHistories->destroy(activeTriggerHistories);
symmetricTableTriggers->destroy(symmetricTableTriggers); // shallow destroy here because these objects are also in 'triggers'.
triggers->destroyAll(triggers, (void *)SymTrigger_destroy);
activeTriggerHistories->destroyAll(activeTriggerHistories, (void *)SymTriggerHistory_destroy);
}
}

Expand Down
5 changes: 4 additions & 1 deletion symmetric-client-clib/src/util/Properties.c
Expand Up @@ -138,9 +138,12 @@ SymProperties * SymProperties_newWithFile(SymProperties *this, char *argPath) {
buff->append(buff, inputBuffer);
}

this = SymProperties_newWithString(NULL, buff->destroyAndReturn(buff));
char *fileContentsRaw = buff->destroyAndReturn(buff);
this = SymProperties_newWithString(NULL, fileContentsRaw);

fclose(file);

free(fileContentsRaw);

return this;
}

0 comments on commit c55a586

Please sign in to comment.