Fossil

Check-in [1073593e]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Change the backoffice-nodelay setting back to default off. Work around a bug in althttpd by making sure CGI runs with no file descriptors open other than 0, 1, and 2. (Edit:) These changes proved insufficient to clear the problem.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | failed-fix
Files: files | file ages | folders
SHA3-256: 1073593e901e179137d9c332ac577dbff9fd1fdfc2f6912d03bd3b7189c2fca8
User & Date: drh 2018-08-01 06:43:41.672
Original Comment: Change the backoffice-nodelay setting back to default off. Work around a bug in althttpd by making sure CGI runs with no file descriptors open other than 0, 1, and 2.
Context
2018-08-01
06:49
Extra efforts to close higher-numbered file descriptors prior to starting CGI. ... (check-in: d6053249 user: drh tags: failed-fix)
06:43
Change the backoffice-nodelay setting back to default off. Work around a bug in althttpd by making sure CGI runs with no file descriptors open other than 0, 1, and 2. (Edit:) These changes proved insufficient to clear the problem. ... (check-in: 1073593e user: drh tags: failed-fix)
2018-07-31
23:38
Make backoffice-nodelay consistently default on. ... (check-in: 71260ba2 user: drh tags: forum-v2)
Changes
Side-by-Side Diff Ignore Whitespace Patch
Changes to src/backoffice.c.
260
261
262
263
264
265
266
267

268
269
270
271
272
273
274
260
261
262
263
264
265
266

267
268
269
270
271
272
273
274







-
+







      if( g.fAnyTrace ){
        fprintf(stderr, "/***** Begin Backoffice Processing %d *****/\n",
                        getpid());
      }
      backoffice_work();
      break;
    }
    if( backofficeNoDelay || db_get_boolean("backoffice-nodelay",1) ){
    if( backofficeNoDelay || db_get_boolean("backoffice-nodelay",0) ){
      /* If the no-delay flag is set, exit immediately rather than queuing
      ** up.  Assume that some future request will come along and handle any
      ** necessary backoffice work. */
      db_end_transaction(0);
      break;
    }
    /* This process needs to queue up and wait for the current lease
Changes to src/cgi.c.
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939

1940
1941
1942
1943
1944
1945
1946
1927
1928
1929
1930
1931
1932
1933





1934
1935
1936
1937
1938
1939
1940
1941
1942







-
-
-
-
-

+







          int nErr = 0, fd;
          close(0);
          fd = dup(connection);
          if( fd!=0 ) nErr++;
          close(1);
          fd = dup(connection);
          if( fd!=1 ) nErr++;
          if( 0 && !g.fAnyTrace ){
            close(2);
            fd = dup(connection);
            if( fd!=2 ) nErr++;
          }
          close(connection);
          for(fd=3; close(fd)==0; fd++){}
          g.nPendingRequest = nchildren+1;
          g.nRequest = nRequest+1;
          return nErr;
        }
      }
    }
    /* Bury dead children */
Changes to src/db.c.
3025
3026
3027
3028
3029
3030
3031
3032

3033
3034
3035
3036
3037
3038
3039
3025
3026
3027
3028
3029
3030
3031

3032
3033
3034
3035
3036
3037
3038
3039







-
+







/*
** SETTING: autosync-tries  width=16 default=1
** If autosync is enabled setting this to a value greater
** than zero will cause autosync to try no more than this
** number of attempts if there is a sync failure.
*/
/*
** SETTING: backoffice-nodelay boolean default=on
** SETTING: backoffice-nodelay boolean default=off
** If backoffice-nodelay is true, then the backoffice processing
** will never invoke sleep().  If it has nothing useful to do,
** it simply exits.
*/
/*
** SETTING: binary-glob     width=40 versionable block-text
** The VALUE of this setting is a comma or newline-separated list of
Changes to src/main.c.
2017
2018
2019
2020
2021
2022
2023





2024
2025
2026
2027
2028
2029
2030
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035







+
+
+
+
+







  }else{
    zFile = g.argv[1];
  }
  g.httpOut = stdout;
  g.httpIn = stdin;
  fossil_binary_mode(g.httpOut);
  fossil_binary_mode(g.httpIn);
#if !defined(_WIN32)
  /* Work around a bug in older versions of althttpd by making sure no
  ** file descriptors other than 0, 1, and 2 are open. */
  { int i; for(i=3; close(i)==0; i++){} }
#endif
  g.cgiOutput = 1;
  blob_read_from_file(&config, zFile, ExtFILE);
  while( blob_line(&config, &line) ){
    if( !blob_token(&line, &key) ) continue;
    if( blob_buffer(&key)[0]=='#' ) continue;
    if( blob_eq(&key, "repository:") && blob_tail(&line, &value) ){
      /* repository: FILENAME