@@ -42,10 +42,11 @@
42 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "backoffice.h"
43 43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <time.h>
44 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(_WIN32)
45 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <windows.h>
46 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <unistd.h>
47 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <sys/types.h>
48 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <signal.h>
49 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
50 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -164,10 +165,28 @@
164 165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (sqlite3_uint64)GetCurrentProcessId();
165 166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
166 167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (sqlite3_uint64)getpid();
167 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
168 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set an alarm to cause the process to exit after "x" seconds. This
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** prevents any kind of bug from keeping a backoffice process running
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** indefinitely.
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(_WIN32)
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void backofficeSigalrmHandler(int x){
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_panic("backoffice timeout");
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void backofficeTimeout(int x){
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(_WIN32)
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ signal(SIGALRM, backofficeSigalrmHandler);
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ alarm(x);
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
169 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
170 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
171 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-process-id
172 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
173 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: %fossil [--sleep N] PROCESS-ID ...
@@ -214,10 +233,11 @@
214 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
215 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_transaction_nesting_depth()!=0 ){
216 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_panic("transaction %s not closed prior to backoffice processing",
217 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_transaction_start_point());
218 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ backofficeTimeout(BKOFCE_LEASE_TIME*2);
219 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idSelf = backofficeProcessId();
220 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while(1){
221 241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmNow = time(0);
222 242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_write();
223 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
backofficeReadLease(&x);
@@ -257,10 +277,13 @@
257 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to expire before continuing. */
258 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.idNext = idSelf;
259 279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.tmNext = (tmNow>x.tmCurrent ? tmNow : x.tmCurrent) + BKOFCE_LEASE_TIME;
260 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
backofficeWriteLease(&x);
261 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.fAnyTrace ){
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fprintf(stderr, "/***** Backoffice On-deck %d *****/\n", getpid());
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
262 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x.tmCurrent >= tmNow ){
263 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_sleep(1000*(x.tmCurrent - tmNow + 1));
264 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
265 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( lastWarning+warningDelay < tmNow ){
266 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_warning(
267 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!