Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | A simpler method of ensuring that backoffice does not cling to the standard input and output. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | backoffice-full-close |
Files: | files | file ages | folders |
SHA3-256: |
8c52c6741283f61f78cfa3a6587f1328 |
User & Date: | drh 2018-08-08 18:10:22.844 |
Context
2018-08-08
| ||
18:13 | Set the default backoffice-nodelay back to off. ... (check-in: 353a4e12 user: drh tags: backoffice-full-close) | |
18:10 | A simpler method of ensuring that backoffice does not cling to the standard input and output. ... (check-in: 8c52c674 user: drh tags: backoffice-full-close) | |
17:57 | In the backoffice process, close the 0, 1, and 2 file descriptiors and reopen them as /dev/null, on unix. ... (check-in: 6865fb72 user: drh tags: backoffice-full-close) | |
Changes
Changes to src/backoffice.c.
︙ | ︙ | |||
707 708 709 710 711 712 713 | backofficeTrace( "/***** Subprocess %d creates backoffice child %lu *****/\n", GETPID(), GetProcessId((HANDLE)x)); if( x>=0 ) return; } #else /* unix */ { | | < < | | 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 | backofficeTrace( "/***** Subprocess %d creates backoffice child %lu *****/\n", GETPID(), GetProcessId((HANDLE)x)); if( x>=0 ) return; } #else /* unix */ { pid_t pid = fork(); if( pid>0 ){ /* This is the parent in a successful fork(). Return immediately. */ backofficeTrace( "/***** Subprocess %d creates backoffice child %d *****/\n", GETPID(), (int)pid); return; } if( pid==0 ){ /* This is the child of a successful fork(). Run backoffice. */ int i; setsid(); for(i=0; i<=2; i++){ close(i); open("/dev/null", O_RDWR); } for(i=3; i<100; i++){ close(i); } db_open_repository(backofficeDb); backofficeDb = "x"; backoffice_thread(); db_close(1); backofficeTrace("/***** Backoffice Child %d exits *****/\n", GETPID()); |
︙ | ︙ |
Changes to src/main.c.
︙ | ︙ | |||
131 132 133 134 135 136 137 | struct Global { int argc; char **argv; /* Command-line arguments to the program */ char *nameOfExe; /* Full path of executable. */ const char *zErrlog; /* Log errors to this file, if not NULL */ int isConst; /* True if the output is unchanging & cacheable */ const char *zVfsName; /* The VFS to use for database connections */ | < | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | struct Global { int argc; char **argv; /* Command-line arguments to the program */ char *nameOfExe; /* Full path of executable. */ const char *zErrlog; /* Log errors to this file, if not NULL */ int isConst; /* True if the output is unchanging & cacheable */ const char *zVfsName; /* The VFS to use for database connections */ sqlite3 *db; /* The connection to the databases */ sqlite3 *dbConfig; /* Separate connection for global_config table */ char *zAuxSchema; /* Main repository aux-schema */ int dbIgnoreErrors; /* Ignore database errors if true */ const char *zConfigDbName;/* Path of the config database. NULL if not open */ sqlite3_int64 now; /* Seconds since 1970 */ int repositoryOpen; /* True if the main repository database is open */ |
︙ | ︙ |
Changes to src/style.c.
︙ | ︙ | |||
17 18 19 20 21 22 23 | ** ** This file contains code to implement the basic web page look and feel. ** */ #include "VERSION.h" #include "config.h" #include "style.h" | < < < < < < | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ** ** This file contains code to implement the basic web page look and feel. ** */ #include "VERSION.h" #include "config.h" #include "style.h" /* ** Elements of the submenu are collected into the following ** structure and displayed below the main menu. ** ** Populate these structure with calls to ** |
︙ | ︙ | |||
441 442 443 444 445 446 447 | headerHasBeenGenerated = 1; sideboxUsed = 0; if( g.perm.Debug && P("showqp") ){ @ <div class="debug"> cgi_print_all(0, 0); @ </div> } | < < < < < < < | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 | headerHasBeenGenerated = 1; sideboxUsed = 0; if( g.perm.Debug && P("showqp") ){ @ <div class="debug"> cgi_print_all(0, 0); @ </div> } } #if INTERFACE /* Allowed parameters for style_adunit() */ #define ADUNIT_OFF 0x0001 /* Do not allow ads on this page */ #define ADUNIT_RIGHT_OK 0x0002 /* Right-side vertical ads ok here */ #endif |
︙ | ︙ |