summaryrefslogtreecommitdiff
path: root/src/c
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2016-03-12 14:11:27 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2016-03-12 14:11:27 -0500
commit6b85dbb54d5d9928a53f0f916cf0cb33c04ff87c (patch)
tree0215bd5985818f74a20c8bc37867e7ee234b0570 /src/c
parentd2823e60805a6cc394b149563ff500ea969b8627 (diff)
Sqlcache: also record script additions; do a MonoReduce afterward, to help Prepare do a better job
Diffstat (limited to 'src/c')
-rw-r--r--src/c/urweb.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index 620893c0..51a122d0 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -505,7 +505,7 @@ struct uw_context {
// Sqlcache.
int numRecording, recordingCapacity;
- int *recordingOffsets;
+ int *recordingOffsets, *scriptRecordingOffsets;
uw_Sqlcache_Update *cacheUpdate;
uw_Sqlcache_Update *cacheUpdateTail;
uw_Sqlcache_Unlock *cacheUnlock;
@@ -597,6 +597,7 @@ uw_context uw_init(int id, uw_loggers *lg) {
ctx->numRecording = 0;
ctx->recordingCapacity = 0;
ctx->recordingOffsets = malloc(0);
+ ctx->scriptRecordingOffsets = malloc(0);
ctx->cacheUpdate = NULL;
ctx->cacheUpdateTail = NULL;
@@ -670,6 +671,7 @@ void uw_free(uw_context ctx) {
free(ctx->output_buffer);
free(ctx->recordingOffsets);
+ free(ctx->scriptRecordingOffsets);
free(ctx);
}
@@ -1757,13 +1759,20 @@ void uw_recordingStart(uw_context ctx) {
if (ctx->numRecording == ctx->recordingCapacity) {
++ctx->recordingCapacity;
ctx->recordingOffsets = realloc(ctx->recordingOffsets, sizeof(int) * ctx->recordingCapacity);
+ ctx->scriptRecordingOffsets = realloc(ctx->scriptRecordingOffsets, sizeof(int) * ctx->recordingCapacity);
}
ctx->recordingOffsets[ctx->numRecording] = ctx->page.front - ctx->page.start;
+ ctx->scriptRecordingOffsets[ctx->numRecording] = ctx->script.front - ctx->script.start;
++ctx->numRecording;
}
char *uw_recordingRead(uw_context ctx) {
- char *recording = ctx->page.start + ctx->recordingOffsets[--ctx->numRecording];
+ char *recording = ctx->page.start + ctx->recordingOffsets[ctx->numRecording-1];
+ return strdup(recording);
+}
+
+char *uw_recordingReadScript(uw_context ctx) {
+ char *recording = ctx->script.start + ctx->scriptRecordingOffsets[--ctx->numRecording];
return strdup(recording);
}
@@ -4587,6 +4596,7 @@ static void uw_Sqlcache_freeValue(uw_Sqlcache_Value *value) {
if (value) {
free(value->result);
free(value->output);
+ free(value->scriptOutput);
free(value);
}
}