@@ -2153,7 +2153,7 @@ int cloudsync_payload_apply (sqlite3_context *context, const char *payload, int
21532153
21542154 // apply payload inside a transaction
21552155 sqlite3 * db = sqlite3_context_db_handle (context );
2156- int rc = sqlite3_exec (db , "BEGIN TRANSACTION ;" , NULL , NULL , NULL );
2156+ int rc = sqlite3_exec (db , "SAVEPOINT cloudsync_payload_apply ;" , NULL , NULL , NULL );
21572157 if (rc != SQLITE_OK ) {
21582158 dbutils_context_result_error (context , "Error on cloudsync_payload_apply: unable to start a transaction (%s)." , sqlite3_errmsg (db ));
21592159 if (clone ) cloudsync_memory_free (clone );
@@ -2204,9 +2204,9 @@ int cloudsync_payload_apply (sqlite3_context *context, const char *payload, int
22042204 stmt_reset (vm );
22052205 }
22062206
2207- char * lasterr = NULL ;
2208- if ( rc != SQLITE_OK && rc != SQLITE_DONE ) lasterr = cloudsync_string_dup ( sqlite3_errmsg ( db ), false) ;
2209- ( lasterr ) ? sqlite3_exec (db , "ROLLBACK;" , NULL , NULL , NULL ) : sqlite3_exec ( db , "COMMIT;" , NULL , NULL , NULL );
2207+ char * lasterr = ( rc != SQLITE_OK && rc != SQLITE_DONE ) ? cloudsync_string_dup ( sqlite3_errmsg ( db ), false) : NULL ;
2208+ sql = ( lasterr ) ? "ROLLBACK TO cloudsync_payload_apply;" : "RELEASE cloudsync_payload_apply;" ;
2209+ sqlite3_exec (db , sql , NULL , NULL , NULL );
22102210
22112211 if (payload_apply_callback ) {
22122212 payload_apply_callback (& payload_apply_xdata , & decoded_context , db , data , CLOUDSYNC_PAYLOAD_APPLY_CLEANUP , rc );
0 commit comments