SWI-Prolog/swish

temporary modules not clearing

Closed this issue · 2 comments

In some cases, the temporary modules are not destroyed. I can see stuff that was asserted there even after the query has died, e.g., after a query has finished, I get from the console:

?- listing(example).
:- dynamic'3dd862cb-361a-421b-f7a0-2e44fd0ded0b':example/3.

'3dd862cb-361a-421b-f7a0-2e44fd0ded0b':example(0, uspec, aleph_false).
'3dd862cb-361a-421b-f7a0-2e44fd0ded0b':example(1, pos, []).
'3dd862cb-361a-421b-f7a0-2e44fd0ded0b':example(1, neg, []).

true.

Unfortunately I could not reproduce the behavior, it happened to me sometimes but I could not understand what triggers it. Most of the times temporary modules are distroyed.
Jan, were you aware of this?

I'm aware of this. It is indeed very hard to reproduce and I'm still unsure where this comes from. They are not the result of incomplete cleaning of the temporary module. If you run pengine_stale_module/2 at the end of the stats.swinb notebook you see that the modules are of class user rather than temporary. This suggests they are recreated, probably while answering delayed requests that arrive after the pengine has died. The leak is no so large that it is critical, but I'm still searching for ways to make cleanup complete and fully reliable. On the same stats page you also see that the number of pengines keeps growing. This is caused by similar issues.

Is pretty much fixed for some time.