Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Fix the "shell" command so that it avoids invoking the atexit() handler more than once. |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
07a5a2118e23760ea090d7b9fed3aa48 |
| User & Date: | drh 2019-08-21 16:55:49.993 |
Context
|
2019-08-21
| ||
| 16:57 | Extra defenses against running fossil_atexit() more than once. check-in: bc7683e15a user: drh tags: trunk | |
| 16:55 | Fix the "shell" command so that it avoids invoking the atexit() handler more than once. check-in: 07a5a2118e user: drh tags: trunk | |
| 15:56 | Server documentation updates. check-in: b2426c2786 user: drh tags: trunk | |
Changes
Changes to src/fshell.c.
| ︙ | ︙ | |||
107 108 109 110 111 112 113 |
printf("could not fork a child process to handle the command\n");
fflush(stdout);
continue;
}
if( childPid==0 ){
/* This is the child process */
int main(int, char**);
| | | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
printf("could not fork a child process to handle the command\n");
fflush(stdout);
continue;
}
if( childPid==0 ){
/* This is the child process */
int main(int, char**);
fossil_main(nArg, azArg);
exit(0);
}else{
/* The parent process */
int status;
waitpid(childPid, &status, 0);
}
}
|
| ︙ | ︙ |
Changes to src/main.c.
| ︙ | ︙ | |||
628 629 630 631 632 633 634 635 636 637 638 639 640 641 |
#else
#if defined(_WIN32)
int _CRT_glob = 0x0001; /* See MinGW bug #2062 */
#endif
int main(int argc, char **argv)
#endif
{
const char *zCmdName = "unknown";
const CmdOrPage *pCmd = 0;
int rc;
#if !defined(_WIN32_WCE)
if( fossil_getenv("FOSSIL_BREAK") ){
if( isatty(0) && isatty(2) ){
| > > > > > > > > > | 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 |
#else
#if defined(_WIN32)
int _CRT_glob = 0x0001; /* See MinGW bug #2062 */
#endif
int main(int argc, char **argv)
#endif
{
return fossil_main(argc, argv);
}
/* All the work of main() is done by a separate procedure "fossil_main()".
** We have to break this out, because fossil_main() is sometimes called
** separately (by the "shell" command) but we do not want atwait() handlers
** being called by separate invocations of fossil_main().
*/
int fossil_main(int argc, char **argv){
const char *zCmdName = "unknown";
const CmdOrPage *pCmd = 0;
int rc;
#if !defined(_WIN32_WCE)
if( fossil_getenv("FOSSIL_BREAK") ){
if( isatty(0) && isatty(2) ){
|
| ︙ | ︙ |