diff src/c/request.c @ 2030:6add6d00ef5f

Call try_rollback before resetting the context This will allow FFI cleanup handlers to complete.
author Sergey Mironov <grrwlf@gmail.com>
date Sun, 15 Jun 2014 21:13:12 +0000
parents bcda3ae88677
children 83bdb52962c9
line wrap: on
line diff
--- 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, "<html><head><title>Fatal Error</title></head><body>");
           uw_write(ctx, "Fatal error: ");
           uw_write(ctx, uw_error_message(ctx));
           uw_write(ctx, "\n</body></html>");
         
-          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</body></html>");
 
-        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;
       }
     }