Author: stsp Date: Fri Jul 29 20:36:13 2011 New Revision: 1152368 URL: http://svn.apache.org/viewvc?rev=1152368&view=rev Log: * subversion/libsvn_wc/wc_db.c (op_delete_txn): Reset open SQLite statements when returning errors that aren't coming from the svn_sqlite__ API.
Found by: rhuijben Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1152368&r1=1152367&r2=1152368&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/wc_db.c (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db.c Fri Jul 29 20:36:13 2011 @@ -6117,25 +6117,34 @@ op_delete_txn(void *baton, const char *child_delete_op_root_relpath = NULL; const char *moved_here_child_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool); + svn_error_t *err; svn_pool_clear(iterpool); /* The moved-here-children query returns info based on the * delete-half of the move. Check if that the copied-half of * the move matches this information. */ - SVN_ERR(read_info(&child_status, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, - wcroot, moved_here_child_relpath, - iterpool, iterpool)); + err = read_info(&child_status, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, + wcroot, moved_here_child_relpath, + iterpool, iterpool); + if (err) + return svn_error_compose_create(err, svn_sqlite__reset(stmt)); + if (child_status == svn_wc__db_status_added) - SVN_ERR(scan_addition(&child_status, NULL, NULL, NULL, + { + err = scan_addition(&child_status, NULL, NULL, NULL, NULL, NULL, NULL, &child_moved_from_relpath, &child_delete_op_root_relpath, wcroot, moved_here_child_relpath, - iterpool, iterpool)); + iterpool, iterpool); + if (err) + return svn_error_compose_create(err, + svn_sqlite__reset(stmt)); + } #ifdef SVN_DEBUG /* This catches incorrectly recorded moves. * It is possible to hit this during normal operation