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.
Commit
08533f90953886e17621bf4db17792ad079d34a675c997d01492112e349a749e
Parent
f1e91a200a7582b…
1 file changed
+7
-6
+7
-6
| --- src/chat.c | ||
| +++ src/chat.c | ||
| @@ -386,10 +386,11 @@ | ||
| 386 | 386 | */ |
| 387 | 387 | void chat_poll_webpage(void){ |
| 388 | 388 | Blob json; /* The json to be constructed and returned */ |
| 389 | 389 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 390 | 390 | int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 391 | + int nDelay = 420; /* Maximum delay. 420*1000 = about 7 minutes */ | |
| 391 | 392 | int msgid = atoi(PD("name","0")); |
| 392 | 393 | const int msgBefore = atoi(PD("before","0")); |
| 393 | 394 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 394 | 395 | Blob sql = empty_blob; |
| 395 | 396 | Stmt q1; |
| @@ -431,11 +432,11 @@ | ||
| 431 | 432 | ); |
| 432 | 433 | } |
| 433 | 434 | db_prepare(&q1, "%s", blob_sql_text(&sql)); |
| 434 | 435 | blob_reset(&sql); |
| 435 | 436 | blob_init(&json, "{\"msgs\":[\n", -1); |
| 436 | - while(1){ | |
| 437 | + while( nDelay>0 ){ | |
| 437 | 438 | int cnt = 0; |
| 438 | 439 | while( db_step(&q1)==SQLITE_ROW ){ |
| 439 | 440 | int id = db_column_int(&q1, 0); |
| 440 | 441 | const char *zDate = db_column_text(&q1, 1); |
| 441 | 442 | const char *zFrom = db_column_text(&q1, 2); |
| @@ -468,25 +469,25 @@ | ||
| 468 | 469 | blob_append(&json, "}", 1); |
| 469 | 470 | } |
| 470 | 471 | } |
| 471 | 472 | db_reset(&q1); |
| 472 | 473 | if( cnt || msgBefore>0 ){ |
| 473 | - blob_append(&json, "\n]}", 3); | |
| 474 | - cgi_set_content(&json); | |
| 475 | 474 | break; |
| 476 | 475 | } |
| 477 | - sqlite3_sleep(iDelay); | |
| 478 | - while( 1 ){ | |
| 476 | + sqlite3_sleep(iDelay); nDelay--; | |
| 477 | + while( nDelay>0 ){ | |
| 479 | 478 | sqlite3_int64 newDataVers = db_int64(0,"PRAGMA repository.data_version"); |
| 480 | 479 | if( newDataVers!=dataVersion ){ |
| 481 | 480 | dataVersion = newDataVers; |
| 482 | 481 | break; |
| 483 | 482 | } |
| 484 | - sqlite3_sleep(iDelay); | |
| 483 | + sqlite3_sleep(iDelay); nDelay--; | |
| 485 | 484 | } |
| 486 | 485 | } /* Exit by "break" */ |
| 487 | 486 | db_finalize(&q1); |
| 487 | + blob_append(&json, "\n]}", 3); | |
| 488 | + cgi_set_content(&json); | |
| 488 | 489 | return; |
| 489 | 490 | } |
| 490 | 491 | |
| 491 | 492 | /* |
| 492 | 493 | ** WEBPAGE: chat-download |
| 493 | 494 |
| --- 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 |