diff --git a/src/csync.c b/src/csync.c index c926679ee8..59e4de99cc 100644 --- a/src/csync.c +++ b/src/csync.c @@ -762,10 +762,17 @@ int csync_commit(CSYNC *ctx) { /* free memory */ c_rbtree_free(ctx->local.tree); c_list_free(ctx->local.list); - // c_list_free(ctx->local.id_list); + c_list_free(ctx->local.id_list); c_rbtree_free(ctx->remote.tree); c_list_free(ctx->remote.list); - // c_list_free(ctx->remote.id_list); + c_list_free(ctx->remote.id_list); + + ctx->remote.list = 0; + ctx->remote.id_list = 0; + ctx->local.list = 0; + ctx->local.id_list = 0; + + ctx->remote.read_from_db = 0; /* create/load statedb */ if (! csync_is_statedb_disabled(ctx)) { @@ -801,6 +808,8 @@ int csync_commit(CSYNC *ctx) { } ctx->status = CSYNC_STATUS_INIT; + ctx->error_code = CSYNC_ERR_NONE; + SAFE_FREE(ctx->error_string); out: return rc; } diff --git a/src/csync_propagate.c b/src/csync_propagate.c index 81d29de4ee..f2cfe421bc 100644 --- a/src/csync_propagate.c +++ b/src/csync_propagate.c @@ -44,25 +44,29 @@ static int _csync_cleanup_cmp(const void *a, const void *b) { csync_file_stat_t *st_a, *st_b; - st_a = (csync_file_stat_t *) a; - st_b = (csync_file_stat_t *) b; + st_a = *((csync_file_stat_t **) a); + st_b = *((csync_file_stat_t **) b); return strcmp(st_a->path, st_b->path); } static void _store_id_update(CSYNC *ctx, csync_file_stat_t *st) { c_list_t *list = NULL; + csync_file_stat_t **pst; + CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "SYNCED remember dir: %s", st->path); + pst = c_malloc(sizeof(csync_file_stat_t*)); + *pst = st; switch (ctx->current) { case LOCAL_REPLICA: - list = c_list_prepend(ctx->local.id_list, (void*)st); + list = c_list_prepend(ctx->local.id_list, (void*)pst); if( list != NULL ) { ctx->local.id_list = list; } break; case REMOTE_REPLICA: - list = c_list_prepend(ctx->remote.id_list, (void*)st); + list = c_list_prepend(ctx->remote.id_list, (void*)pst); if(list != NULL ) { ctx->remote.id_list = list; } @@ -1292,7 +1296,7 @@ int csync_correct_id(CSYNC *ctx) { for (walk = c_list_last(list); walk != NULL; walk = c_list_prev(walk)) { csync_file_stat_t *st = NULL; - st = (csync_file_stat_t *) walk->data; + st = *((csync_file_stat_t **) walk->data); if( st->type == CSYNC_FTW_TYPE_FILE ) { path = c_dirname( st->path ); } else if( st->type == CSYNC_FTW_TYPE_DIR ) {