Fossil SCM

Change /chat-poll so that it times out after 7 minutes. This prevents the server from timing out the request and generating errors in the log.

drh 2020-12-25 12:09 trunk
Commit 08533f90953886e17621bf4db17792ad079d34a675c997d01492112e349a749e
1 file changed +7 -6
+7 -6
--- src/chat.c
+++ src/chat.c
@@ -386,10 +386,11 @@
386386
*/
387387
void chat_poll_webpage(void){
388388
Blob json; /* The json to be constructed and returned */
389389
sqlite3_int64 dataVersion; /* Data version. Used for polling. */
390390
int iDelay = 1000; /* Delay until next poll (milliseconds) */
391
+ int nDelay = 420; /* Maximum delay. 420*1000 = about 7 minutes */
391392
int msgid = atoi(PD("name","0"));
392393
const int msgBefore = atoi(PD("before","0"));
393394
int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
394395
Blob sql = empty_blob;
395396
Stmt q1;
@@ -431,11 +432,11 @@
431432
);
432433
}
433434
db_prepare(&q1, "%s", blob_sql_text(&sql));
434435
blob_reset(&sql);
435436
blob_init(&json, "{\"msgs\":[\n", -1);
436
- while(1){
437
+ while( nDelay>0 ){
437438
int cnt = 0;
438439
while( db_step(&q1)==SQLITE_ROW ){
439440
int id = db_column_int(&q1, 0);
440441
const char *zDate = db_column_text(&q1, 1);
441442
const char *zFrom = db_column_text(&q1, 2);
@@ -468,25 +469,25 @@
468469
blob_append(&json, "}", 1);
469470
}
470471
}
471472
db_reset(&q1);
472473
if( cnt || msgBefore>0 ){
473
- blob_append(&json, "\n]}", 3);
474
- cgi_set_content(&json);
475474
break;
476475
}
477
- sqlite3_sleep(iDelay);
478
- while( 1 ){
476
+ sqlite3_sleep(iDelay); nDelay--;
477
+ while( nDelay>0 ){
479478
sqlite3_int64 newDataVers = db_int64(0,"PRAGMA repository.data_version");
480479
if( newDataVers!=dataVersion ){
481480
dataVersion = newDataVers;
482481
break;
483482
}
484
- sqlite3_sleep(iDelay);
483
+ sqlite3_sleep(iDelay); nDelay--;
485484
}
486485
} /* Exit by "break" */
487486
db_finalize(&q1);
487
+ blob_append(&json, "\n]}", 3);
488
+ cgi_set_content(&json);
488489
return;
489490
}
490491
491492
/*
492493
** WEBPAGE: chat-download
493494
--- src/chat.c
+++ src/chat.c
@@ -386,10 +386,11 @@
386 */
387 void chat_poll_webpage(void){
388 Blob json; /* The json to be constructed and returned */
389 sqlite3_int64 dataVersion; /* Data version. Used for polling. */
390 int iDelay = 1000; /* Delay until next poll (milliseconds) */
 
391 int msgid = atoi(PD("name","0"));
392 const int msgBefore = atoi(PD("before","0"));
393 int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
394 Blob sql = empty_blob;
395 Stmt q1;
@@ -431,11 +432,11 @@
431 );
432 }
433 db_prepare(&q1, "%s", blob_sql_text(&sql));
434 blob_reset(&sql);
435 blob_init(&json, "{\"msgs\":[\n", -1);
436 while(1){
437 int cnt = 0;
438 while( db_step(&q1)==SQLITE_ROW ){
439 int id = db_column_int(&q1, 0);
440 const char *zDate = db_column_text(&q1, 1);
441 const char *zFrom = db_column_text(&q1, 2);
@@ -468,25 +469,25 @@
468 blob_append(&json, "}", 1);
469 }
470 }
471 db_reset(&q1);
472 if( cnt || msgBefore>0 ){
473 blob_append(&json, "\n]}", 3);
474 cgi_set_content(&json);
475 break;
476 }
477 sqlite3_sleep(iDelay);
478 while( 1 ){
479 sqlite3_int64 newDataVers = db_int64(0,"PRAGMA repository.data_version");
480 if( newDataVers!=dataVersion ){
481 dataVersion = newDataVers;
482 break;
483 }
484 sqlite3_sleep(iDelay);
485 }
486 } /* Exit by "break" */
487 db_finalize(&q1);
 
 
488 return;
489 }
490
491 /*
492 ** WEBPAGE: chat-download
493
--- src/chat.c
+++ src/chat.c
@@ -386,10 +386,11 @@
386 */
387 void chat_poll_webpage(void){
388 Blob json; /* The json to be constructed and returned */
389 sqlite3_int64 dataVersion; /* Data version. Used for polling. */
390 int iDelay = 1000; /* Delay until next poll (milliseconds) */
391 int nDelay = 420; /* Maximum delay. 420*1000 = about 7 minutes */
392 int msgid = atoi(PD("name","0"));
393 const int msgBefore = atoi(PD("before","0"));
394 int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
395 Blob sql = empty_blob;
396 Stmt q1;
@@ -431,11 +432,11 @@
432 );
433 }
434 db_prepare(&q1, "%s", blob_sql_text(&sql));
435 blob_reset(&sql);
436 blob_init(&json, "{\"msgs\":[\n", -1);
437 while( nDelay>0 ){
438 int cnt = 0;
439 while( db_step(&q1)==SQLITE_ROW ){
440 int id = db_column_int(&q1, 0);
441 const char *zDate = db_column_text(&q1, 1);
442 const char *zFrom = db_column_text(&q1, 2);
@@ -468,25 +469,25 @@
469 blob_append(&json, "}", 1);
470 }
471 }
472 db_reset(&q1);
473 if( cnt || msgBefore>0 ){
 
 
474 break;
475 }
476 sqlite3_sleep(iDelay); nDelay--;
477 while( nDelay>0 ){
478 sqlite3_int64 newDataVers = db_int64(0,"PRAGMA repository.data_version");
479 if( newDataVers!=dataVersion ){
480 dataVersion = newDataVers;
481 break;
482 }
483 sqlite3_sleep(iDelay); nDelay--;
484 }
485 } /* Exit by "break" */
486 db_finalize(&q1);
487 blob_append(&json, "\n]}", 3);
488 cgi_set_content(&json);
489 return;
490 }
491
492 /*
493 ** WEBPAGE: chat-download
494

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button