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