# HG changeset patch # User Sergey Mironov # Date 1402866792 0 # Node ID 6add6d00ef5f9d501dc5f2f8b418871ad53bba0c # Parent dfa35ca83d9230942df04dcc927fd1ad322e3233 Call try_rollback before resetting the context This will allow FFI cleanup handlers to complete. diff -r dfa35ca83d92 -r 6add6d00ef5f src/c/request.c --- a/src/c/request.c Sun Jun 15 10:48:53 2014 -0400 +++ b/src/c/request.c Sun Jun 15 21:13:12 2014 +0000 @@ -503,14 +503,14 @@ had_error = 1; strcpy(errmsg, uw_error_message(ctx)); } else { + try_rollback(ctx, 0, logger_data, log_error); + uw_write_header(ctx, "Content-type: text/html\r\n"); uw_write(ctx, "Fatal Error"); uw_write(ctx, "Fatal error: "); uw_write(ctx, uw_error_message(ctx)); uw_write(ctx, "\n"); - try_rollback(ctx, 0, logger_data, log_error); - return FAILED; } } else @@ -527,14 +527,14 @@ had_error = 1; strcpy(errmsg, uw_error_message(ctx)); } else { + try_rollback(ctx, 0, logger_data, log_error); + uw_reset_keep_error_message(ctx); on_failure(ctx); uw_write_header(ctx, "Content-type: text/plain\r\n"); uw_write(ctx, "Fatal error (out of retries): "); uw_write(ctx, uw_error_message(ctx)); uw_write(ctx, "\n"); - - try_rollback(ctx, 0, logger_data, log_error); return FAILED; } @@ -548,6 +548,8 @@ had_error = 1; strcpy(errmsg, uw_error_message(ctx)); } else { + try_rollback(ctx, 0, logger_data, log_error); + uw_reset_keep_error_message(ctx); on_failure(ctx); uw_write_header(ctx, "Content-type: text/html\r\n"); @@ -556,8 +558,6 @@ uw_write(ctx, uw_error_message(ctx)); uw_write(ctx, "\n"); - try_rollback(ctx, 0, logger_data, log_error); - return FAILED; } } else { @@ -567,13 +567,13 @@ had_error = 1; strcpy(errmsg, "Unknown uw_handle return code"); } else { + try_rollback(ctx, 0, logger_data, log_error); + uw_reset_keep_request(ctx); on_failure(ctx); uw_write_header(ctx, "Content-type: text/plain\r\n"); uw_write(ctx, "Unknown uw_handle return code!\n"); - try_rollback(ctx, 0, logger_data, log_error); - return FAILED; } } diff -r dfa35ca83d92 -r 6add6d00ef5f src/c/urweb.c --- a/src/c/urweb.c Sun Jun 15 10:48:53 2014 -0400 +++ b/src/c/urweb.c Sun Jun 15 21:13:12 2014 +0000 @@ -3343,7 +3343,7 @@ if (ctx->transactionals[i].free) ctx->transactionals[i].free(ctx->transactionals[i].data, 1); - return 1; + return 1; } for (i = ctx->used_transactionals-1; i >= 0; --i)