diff src/c/request.c @ 1774:27fdd78bd2f5

Avoid redundant rollbacks
author Adam Chlipala <adam@chlipala.net>
date Sat, 02 Jun 2012 10:54:49 -0400
parents 4d0b80dd4c37
children 69daa6d70299
line wrap: on
line diff
--- a/src/c/request.c	Sat May 26 09:16:14 2012 -0400
+++ b/src/c/request.c	Sat Jun 02 10:54:49 2012 -0400
@@ -503,6 +503,8 @@
           uw_write(ctx, uw_error_message(ctx));
           uw_write(ctx, "\n</body></html>");
         
+          try_rollback(ctx, 0, logger_data, log_error);
+
           return FAILED;
         }
       } else
@@ -515,8 +517,6 @@
       else {
         log_error(logger_data, "Fatal error (out of retries): %s\n", uw_error_message(ctx));
 
-        try_rollback(ctx, 0, logger_data, log_error);
-
         if (!had_error && uw_get_app(ctx)->on_error) {
           had_error = 1;
           strcpy(errmsg, uw_error_message(ctx));
@@ -528,6 +528,8 @@
           uw_write(ctx, uw_error_message(ctx));
           uw_write(ctx, "\n");
           
+          try_rollback(ctx, 0, logger_data, log_error);
+
           return FAILED;
         }
       }
@@ -536,8 +538,6 @@
     else if (fk == FATAL) {
       log_error(logger_data, "Fatal error: %s\n", uw_error_message(ctx));
 
-      try_rollback(ctx, 0, logger_data, log_error);
-
       if (uw_get_app(ctx)->on_error && !had_error) {
         had_error = 1;
         strcpy(errmsg, uw_error_message(ctx));
@@ -550,13 +550,13 @@
         uw_write(ctx, uw_error_message(ctx));
         uw_write(ctx, "\n</body></html>");
 
+        try_rollback(ctx, 0, logger_data, log_error);
+
         return FAILED;
       }
     } else {
       log_error(logger_data, "Unknown uw_handle return code!\n");
 
-      try_rollback(ctx, 0, logger_data, log_error);
-
       if (uw_get_app(ctx)->on_error && !had_error) {
         had_error = 1;
         strcpy(errmsg, "Unknown uw_handle return code");
@@ -566,6 +566,8 @@
         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;
       }
     }