Fossil SCM

Further improvements to the fossil_panic() procedure to prevent it from looping and to force an early close of the database file.

drh 2013-08-30 06:41 UTC trunk
Commit 9d73d4c127fc8cf0fc9bbe86a725ebf6f68f9dfa
1 file changed +6 -8
+6 -8
--- src/printf.c
+++ src/printf.c
@@ -922,17 +922,16 @@
922922
*/
923923
NORETURN void fossil_panic(const char *zFormat, ...){
924924
va_list ap;
925925
int rc = 1;
926926
char z[1000];
927
- static int once = 1;
927
+ static int once = 0;
928928
929
- if( g.db ){
930
- sqlite3_close_v2(g.db);
931
- g.db = 0;
932
- }
929
+ if( once ) exit(1);
930
+ once = 1;
933931
mainInFatalError = 1;
932
+ db_force_rollback();
934933
va_start(ap, zFormat);
935934
sqlite3_vsnprintf(sizeof(z),z,zFormat, ap);
936935
va_end(ap);
937936
#ifdef FOSSIL_ENABLE_JSON
938937
if( g.json.isJsonMode ){
@@ -942,22 +941,21 @@
942941
}
943942
}
944943
else
945944
#endif
946945
{
947
- if( g.cgiOutput && once ){
948
- once = 0;
946
+ if( g.cgiOutput ){
949947
cgi_printf("<p class=\"generalError\">%h</p>", z);
950948
cgi_reply();
951949
}else if( !g.fQuiet ){
952950
fossil_force_newline();
953951
fossil_puts("Fossil internal error: ", 1);
954952
fossil_puts(z, 1);
955953
fossil_puts("\n", 1);
956954
}
957955
}
958
- fossil_exit(rc);
956
+ exit(rc);
959957
}
960958
961959
NORETURN void fossil_fatal(const char *zFormat, ...){
962960
char *z;
963961
int rc = 1;
964962
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button