Fossil SCM
Further improvements to the fossil_panic() procedure to prevent it from looping and to force an early close of the database file.
Commit
9d73d4c127fc8cf0fc9bbe86a725ebf6f68f9dfa
Parent
98b16c72c72a0cd…
1 file changed
+6
-8
+6
-8
| --- src/printf.c | ||
| +++ src/printf.c | ||
| @@ -922,17 +922,16 @@ | ||
| 922 | 922 | */ |
| 923 | 923 | NORETURN void fossil_panic(const char *zFormat, ...){ |
| 924 | 924 | va_list ap; |
| 925 | 925 | int rc = 1; |
| 926 | 926 | char z[1000]; |
| 927 | - static int once = 1; | |
| 927 | + static int once = 0; | |
| 928 | 928 | |
| 929 | - if( g.db ){ | |
| 930 | - sqlite3_close_v2(g.db); | |
| 931 | - g.db = 0; | |
| 932 | - } | |
| 929 | + if( once ) exit(1); | |
| 930 | + once = 1; | |
| 933 | 931 | mainInFatalError = 1; |
| 932 | + db_force_rollback(); | |
| 934 | 933 | va_start(ap, zFormat); |
| 935 | 934 | sqlite3_vsnprintf(sizeof(z),z,zFormat, ap); |
| 936 | 935 | va_end(ap); |
| 937 | 936 | #ifdef FOSSIL_ENABLE_JSON |
| 938 | 937 | if( g.json.isJsonMode ){ |
| @@ -942,22 +941,21 @@ | ||
| 942 | 941 | } |
| 943 | 942 | } |
| 944 | 943 | else |
| 945 | 944 | #endif |
| 946 | 945 | { |
| 947 | - if( g.cgiOutput && once ){ | |
| 948 | - once = 0; | |
| 946 | + if( g.cgiOutput ){ | |
| 949 | 947 | cgi_printf("<p class=\"generalError\">%h</p>", z); |
| 950 | 948 | cgi_reply(); |
| 951 | 949 | }else if( !g.fQuiet ){ |
| 952 | 950 | fossil_force_newline(); |
| 953 | 951 | fossil_puts("Fossil internal error: ", 1); |
| 954 | 952 | fossil_puts(z, 1); |
| 955 | 953 | fossil_puts("\n", 1); |
| 956 | 954 | } |
| 957 | 955 | } |
| 958 | - fossil_exit(rc); | |
| 956 | + exit(rc); | |
| 959 | 957 | } |
| 960 | 958 | |
| 961 | 959 | NORETURN void fossil_fatal(const char *zFormat, ...){ |
| 962 | 960 | char *z; |
| 963 | 961 | int rc = 1; |
| 964 | 962 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -922,17 +922,16 @@ | |
| 922 | */ |
| 923 | NORETURN void fossil_panic(const char *zFormat, ...){ |
| 924 | va_list ap; |
| 925 | int rc = 1; |
| 926 | char z[1000]; |
| 927 | static int once = 1; |
| 928 | |
| 929 | if( g.db ){ |
| 930 | sqlite3_close_v2(g.db); |
| 931 | g.db = 0; |
| 932 | } |
| 933 | mainInFatalError = 1; |
| 934 | va_start(ap, zFormat); |
| 935 | sqlite3_vsnprintf(sizeof(z),z,zFormat, ap); |
| 936 | va_end(ap); |
| 937 | #ifdef FOSSIL_ENABLE_JSON |
| 938 | if( g.json.isJsonMode ){ |
| @@ -942,22 +941,21 @@ | |
| 942 | } |
| 943 | } |
| 944 | else |
| 945 | #endif |
| 946 | { |
| 947 | if( g.cgiOutput && once ){ |
| 948 | once = 0; |
| 949 | cgi_printf("<p class=\"generalError\">%h</p>", z); |
| 950 | cgi_reply(); |
| 951 | }else if( !g.fQuiet ){ |
| 952 | fossil_force_newline(); |
| 953 | fossil_puts("Fossil internal error: ", 1); |
| 954 | fossil_puts(z, 1); |
| 955 | fossil_puts("\n", 1); |
| 956 | } |
| 957 | } |
| 958 | fossil_exit(rc); |
| 959 | } |
| 960 | |
| 961 | NORETURN void fossil_fatal(const char *zFormat, ...){ |
| 962 | char *z; |
| 963 | int rc = 1; |
| 964 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -922,17 +922,16 @@ | |
| 922 | */ |
| 923 | NORETURN void fossil_panic(const char *zFormat, ...){ |
| 924 | va_list ap; |
| 925 | int rc = 1; |
| 926 | char z[1000]; |
| 927 | static int once = 0; |
| 928 | |
| 929 | if( once ) exit(1); |
| 930 | once = 1; |
| 931 | mainInFatalError = 1; |
| 932 | db_force_rollback(); |
| 933 | va_start(ap, zFormat); |
| 934 | sqlite3_vsnprintf(sizeof(z),z,zFormat, ap); |
| 935 | va_end(ap); |
| 936 | #ifdef FOSSIL_ENABLE_JSON |
| 937 | if( g.json.isJsonMode ){ |
| @@ -942,22 +941,21 @@ | |
| 941 | } |
| 942 | } |
| 943 | else |
| 944 | #endif |
| 945 | { |
| 946 | if( g.cgiOutput ){ |
| 947 | cgi_printf("<p class=\"generalError\">%h</p>", z); |
| 948 | cgi_reply(); |
| 949 | }else if( !g.fQuiet ){ |
| 950 | fossil_force_newline(); |
| 951 | fossil_puts("Fossil internal error: ", 1); |
| 952 | fossil_puts(z, 1); |
| 953 | fossil_puts("\n", 1); |
| 954 | } |
| 955 | } |
| 956 | exit(rc); |
| 957 | } |
| 958 | |
| 959 | NORETURN void fossil_fatal(const char *zFormat, ...){ |
| 960 | char *z; |
| 961 | int rc = 1; |
| 962 |