summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-04-05 11:24:55 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-04-05 11:24:55 -0400
commit37eeae6bc2503281d1b806c85aa0e70645fd9966 (patch)
tree629c88474e3f44efa4384f199ee22debb4e240bd /src
parent3b2a5f0903f59d0a58de4201ab4f16d34423bf25 (diff)
RoundTrip demo
Diffstat (limited to 'src')
-rw-r--r--src/c/driver.c28
-rw-r--r--src/c/urweb.c2
-rw-r--r--src/rpcify.sml4
3 files changed, 23 insertions, 11 deletions
diff --git a/src/c/driver.c b/src/c/driver.c
index 52999da3..44465cc3 100644
--- a/src/c/driver.c
+++ b/src/c/driver.c
@@ -67,15 +67,14 @@ static int try_rollback(uw_context ctx) {
return r;
}
-static void *worker(void *data) {
- int me = *(int *)data, retries_left = MAX_RETRIES;
+static uw_context new_context() {
uw_context ctx = uw_init();
-
+ int retries_left = MAX_RETRIES;
+
while (1) {
failure_kind fk = uw_begin_init(ctx);
if (fk == SUCCESS) {
- uw_db_init(ctx);
printf("Database connection initialized.\n");
break;
} else if (fk == BOUNDED_RETRY) {
@@ -94,12 +93,19 @@ static void *worker(void *data) {
uw_free(ctx);
return NULL;
} else {
- printf("Unknown uw_handle return code!\n");
+ printf("Unknown uw_begin_init return code!\n");
uw_free(ctx);
return NULL;
}
}
+ return ctx;
+}
+
+static void *worker(void *data) {
+ int me = *(int *)data, retries_left = MAX_RETRIES;
+ uw_context ctx = new_context();
+
while (1) {
char buf[uw_bufsize+1], *back = buf, *s;
int sock, dont_close = 0;
@@ -278,8 +284,10 @@ static void *worker(void *data) {
}
static void *client_pruner(void *data) {
- uw_context ctx = uw_init();
- uw_db_init(ctx);
+ uw_context ctx = new_context();
+
+ if (!ctx)
+ exit(1);
while (1) {
uw_prune_clients(ctx);
@@ -297,9 +305,11 @@ static void sigint(int signum) {
}
static void initialize() {
- uw_context ctx = uw_init();
+ uw_context ctx = new_context();
+
+ if (!ctx)
+ exit(1);
- uw_db_init(ctx);
if (uw_initialize(ctx) != SUCCESS) {
printf("Failed to initialize database!\n");
uw_db_rollback(ctx);
diff --git a/src/c/urweb.c b/src/c/urweb.c
index 9915219d..1b3cfb1d 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -322,7 +322,7 @@ uw_context uw_init() {
buf_init(&ctx->outHeaders, 0);
buf_init(&ctx->page, 0);
buf_init(&ctx->heap, 0);
- buf_init(&ctx->script, 0);
+ buf_init(&ctx->script, 1);
ctx->script.start[0] = 0;
ctx->inputs = calloc(uw_inputs_len, sizeof(char *));
diff --git a/src/rpcify.sml b/src/rpcify.sml
index dc8ecc52..846cc6c5 100644
--- a/src/rpcify.sml
+++ b/src/rpcify.sml
@@ -59,7 +59,9 @@ val csBasis = SS.addList (SS.empty,
["get",
"set",
"alert",
- "recv"])
+ "recv",
+ "sleep",
+ "spawn"])
type state = {
cpsed : int IM.map,