diff src/c/urweb.c @ 1294:b4480a56cab7

Server-side 'onError'
author Adam Chlipala <adam@chlipala.net>
date Tue, 07 Sep 2010 08:28:07 -0400
parents 829da30fb808
children 929981850d9d
line wrap: on
line diff
--- a/src/c/urweb.c	Sun Sep 05 14:00:57 2010 -0400
+++ b/src/c/urweb.c	Tue Sep 07 08:28:07 2010 -0400
@@ -353,8 +353,6 @@
 
 // Single-request state
 
-#define ERROR_BUF_LEN 1024
-
 typedef struct regions {
   struct regions *next;
 } regions;
@@ -714,6 +712,22 @@
   return r;
 }
 
+failure_kind uw_begin_onError(uw_context ctx, char *msg) {
+  int r = setjmp(ctx->jmp_buf);
+
+  if (ctx->app->on_error) {
+    if (r == 0) {
+      if (ctx->app->db_begin(ctx))
+        uw_error(ctx, BOUNDED_RETRY, "Error running SQL BEGIN");
+
+      ctx->app->on_error(ctx, msg);
+    }
+
+    return r;
+  } else
+    uw_error(ctx, FATAL, "Tried to run nonexistent onError handler");
+}
+
 uw_Basis_client uw_Basis_self(uw_context ctx) {
   if (ctx->client == NULL)
     uw_error(ctx, FATAL, "Call to Basis.self() from page that has only server-side code");