summaryrefslogtreecommitdiff
path: root/src/c/urweb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/c/urweb.c')
-rw-r--r--src/c/urweb.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index 74e1b12e..cac518ec 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -353,8 +353,6 @@ int uw_time = 0;
// Single-request state
-#define ERROR_BUF_LEN 1024
-
typedef struct regions {
struct regions *next;
} regions;
@@ -714,6 +712,22 @@ failure_kind uw_begin(uw_context ctx, char *path) {
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");