[email protected] wrote: > Hi again, > > I was able to recreate the scenario in a test case. I must have mixed > something up previously. After more tests it seems that the memory > growth only appears when transactions are reset within the child. > > Here's the full code: > https://gist.github.com/dim/6122131 > > Output on my machine: > > $ rm -f testdb/* && mkdir -p testdb && make mtest8 && ./mtest8 > gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast > -c mtest8.c > gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast > mtest8.o liblmdb.a -o mtest8 > NO FORK : 1699840 > FORK & OPEN : 1699840 > FORK & COPY : 6225920
This behavior is expected. Your child process is holding a read txn while it performs the env_copyfd(). During that time writers are not able to reuse old data pages, so all writes consume new pages. When the copyfd completes and releases its read txn the writers will resume reusing old pages. There's no bug here, this ITS will be closed. -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/
