Fossil SCM
atexit: no longer freeing about half of g.zXYZ because they're not always safe to free (sometimes they point to each other or are substrings of other strings).
Commit
5f36a86a73aef8bb5dc96439a3dfd970eceb76497198ea8639402b100068bc74
Parent
00e6d7997c3e69a…
1 file changed
+10
-8
+10
-8
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -392,26 +392,28 @@ | ||
| 392 | 392 | if(g.db){ |
| 393 | 393 | db_close(0); |
| 394 | 394 | } |
| 395 | 395 | fossil_free(g.ckinLockFail); |
| 396 | 396 | fossil_free(g.zAuxSchema); |
| 397 | - fossil_free(g.zBaseURL); | |
| 398 | 397 | fossil_free(g.zConfigDbName); |
| 399 | 398 | fossil_free(g.zErrMsg); |
| 400 | - fossil_free(g.zExtra); | |
| 401 | 399 | fossil_free(g.zHttpAuth); |
| 402 | - fossil_free(g.zHttpsURL); | |
| 403 | 400 | fossil_free(g.zIpAddr); |
| 404 | 401 | fossil_free(g.zLocalDbName); |
| 405 | 402 | fossil_free(g.zLocalRoot); |
| 406 | 403 | fossil_free(g.zNonce); |
| 407 | - fossil_free(g.zOpenRevision); | |
| 408 | - fossil_free(g.zPath); | |
| 409 | - fossil_free(g.zRepositoryName); | |
| 410 | - fossil_free(g.zRepositoryOption); | |
| 411 | 404 | fossil_free(g.zSshCmd); |
| 412 | - fossil_free(g.zTop); | |
| 405 | +#define never_free(x) | |
| 406 | + never_free(g.zTop/* sometimes part of another string */); | |
| 407 | + never_free(g.zPath /* sometimes part of another string */); | |
| 408 | + never_free(g.zBaseURL /* might be the same as g.zTop */); | |
| 409 | + never_free(g.zRepositoryOption/* sometimes static */); | |
| 410 | + never_free(g.zRepositoryName /* sometimes static */); | |
| 411 | + never_free(g.zOpenRevision /* sometimes static */); | |
| 412 | + never_free(g.zHttpsURL /* sometimes = g.zBaseUrl */); | |
| 413 | + never_free(g.zExtra /* might be part of another string */); | |
| 414 | +#undef never_free | |
| 413 | 415 | manifest_clear_cache(); |
| 414 | 416 | content_clear_cache(1); |
| 415 | 417 | rebuild_clear_cache(); |
| 416 | 418 | if(fossilFreeAtExit.n>0){ |
| 417 | 419 | int i; |
| 418 | 420 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -392,26 +392,28 @@ | |
| 392 | if(g.db){ |
| 393 | db_close(0); |
| 394 | } |
| 395 | fossil_free(g.ckinLockFail); |
| 396 | fossil_free(g.zAuxSchema); |
| 397 | fossil_free(g.zBaseURL); |
| 398 | fossil_free(g.zConfigDbName); |
| 399 | fossil_free(g.zErrMsg); |
| 400 | fossil_free(g.zExtra); |
| 401 | fossil_free(g.zHttpAuth); |
| 402 | fossil_free(g.zHttpsURL); |
| 403 | fossil_free(g.zIpAddr); |
| 404 | fossil_free(g.zLocalDbName); |
| 405 | fossil_free(g.zLocalRoot); |
| 406 | fossil_free(g.zNonce); |
| 407 | fossil_free(g.zOpenRevision); |
| 408 | fossil_free(g.zPath); |
| 409 | fossil_free(g.zRepositoryName); |
| 410 | fossil_free(g.zRepositoryOption); |
| 411 | fossil_free(g.zSshCmd); |
| 412 | fossil_free(g.zTop); |
| 413 | manifest_clear_cache(); |
| 414 | content_clear_cache(1); |
| 415 | rebuild_clear_cache(); |
| 416 | if(fossilFreeAtExit.n>0){ |
| 417 | int i; |
| 418 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -392,26 +392,28 @@ | |
| 392 | if(g.db){ |
| 393 | db_close(0); |
| 394 | } |
| 395 | fossil_free(g.ckinLockFail); |
| 396 | fossil_free(g.zAuxSchema); |
| 397 | fossil_free(g.zConfigDbName); |
| 398 | fossil_free(g.zErrMsg); |
| 399 | fossil_free(g.zHttpAuth); |
| 400 | fossil_free(g.zIpAddr); |
| 401 | fossil_free(g.zLocalDbName); |
| 402 | fossil_free(g.zLocalRoot); |
| 403 | fossil_free(g.zNonce); |
| 404 | fossil_free(g.zSshCmd); |
| 405 | #define never_free(x) |
| 406 | never_free(g.zTop/* sometimes part of another string */); |
| 407 | never_free(g.zPath /* sometimes part of another string */); |
| 408 | never_free(g.zBaseURL /* might be the same as g.zTop */); |
| 409 | never_free(g.zRepositoryOption/* sometimes static */); |
| 410 | never_free(g.zRepositoryName /* sometimes static */); |
| 411 | never_free(g.zOpenRevision /* sometimes static */); |
| 412 | never_free(g.zHttpsURL /* sometimes = g.zBaseUrl */); |
| 413 | never_free(g.zExtra /* might be part of another string */); |
| 414 | #undef never_free |
| 415 | manifest_clear_cache(); |
| 416 | content_clear_cache(1); |
| 417 | rebuild_clear_cache(); |
| 418 | if(fossilFreeAtExit.n>0){ |
| 419 | int i; |
| 420 |