Either I'm confused or the gc is
donallen
donaldcallen at gmail.com
Thu Oct 22 14:01:25 UTC 2020
Some new things:
1. I tried building with the gc-profile option, like so:
dmd -g -profile=gc -I=../library -L='-lsqlite3' verifier.d
../library/lib.o
When I run the program built this way, the problem does not
occur. There is also no gc profiling output. Makes me wonder if
the compile-time option somehow altered things (increased heap
size?) that resulted in no gcs? Pure speculation on my part, but
it is consistent with the behavior (program works correctly when
the gc doesn't run, no profiling output suggests no gc).
But if I enable gc profiling at the command line:
verifier "--DRT-gcopt=profile:1" /tmp/Finances.newcash
the problem does occur and I get profiling output:
Number of collections: 3
Total GC prep time: 0 milliseconds
Total mark time: 0 milliseconds
Total sweep time: 0 milliseconds
Max Pause Time: 0 milliseconds
Grand total GC time: 0 milliseconds
GC summary: 5 MB, 3 GC 0 ms, Pauses 0 ms < 0 ms
2. I tried adding a call to addrOf(children.ptr), panicking on a
null return, just before the recursive calls to the tree walker.
No panic.
I will look into a way to reproduce this that I can give to the
project. The problem is not the code -- it's the data. The
database that the D version of the verifier is failing on
contains literally decades of our financial transactions. So
while there is nothing illegal, immoral or fattening in it, it's
nobody's business but ours. So I need to create a new database
with no personal info in it that provokes the problem.
I will also look into running the verifier under Valgrind.
I don't know when I will be able to devote more time to this.
Like everyone, I've got other things on my plate.
Thanks to everyone who has tried to help.
More information about the Digitalmars-d
mailing list