In the current code if open returns with error EMFILE the RTS does a full GC in the hope that this will close some unreferenced files. It then retries the call. In the current rewrite that code has been removed so it looks like you'll have to look at this!

Happy new year to you and everyone else on the list,
David

On 31/12/2018 08:49, michael.norr...@data61.csiro.au wrote:
I wondered about this, and it's clear to me that HOL4's Holmake tool has been 
implicitly relying on garbage collection of unreachable fds.  In particular, 
when I compile and run Holmake with mlton I can get excessive fd OS exceptions 
that I don't see with Poly/ML.  I guessed I had a bug to fix, but Poly/ML was 
encouraging me to ignore the problem :)

Make of that what you will.

Happy new year,
Michael

On 26/12/18, 20:50, "polyml on behalf of David Matthews" 
<polyml-boun...@inf.ed.ac.uk on behalf of david.matth...@prolingua.co.uk> wrote:

     I've had a look at this and I think I know what is going wrong.  There
     is a global table that holds information about open streams.  There is
     an interlock to prevent two threads both growing the table at the same
     time but it turns out there is no interlock to prevent one thread
     growing it while another thread is reading an entry.  I've fixed this
     and pushed some changes to a MultiThreadIO branch on GitHub.
However, the table itself is really a relic of some very old code and
     the whole thing needs to be replaced.  The table does two things.  One
     is to ensure that streams are not persistent: i.e. if a stream is opened
     and a reference to the stream is saved using PolyML.SaveState.saveState
     or PolyML.export then any attempt to use it when the saved state is
     reloaded will fail with an exception.  The other use of the table is to
     enable streams to be garbage-collected: i.e. if a stream is no longer
     reachable then at some point the stream will be closed.
Achieving non-persistence is easy as a result of some recent changes.
     Garbaging-collecting streams is more difficult.  Does anyone actually
     rely on streams being garbage-collected?  Would doing away with that and
     requiring streams to be closed explicitly cause any problems?
David On 24/12/2018 16:20, Kostirya wrote:
     > Hello.
     > I got sometimes Segmentation fault.
     > The GDB backtrace of core file is bellow.
     > It is multi thread server. I call Socket.bind and Socket.listen in
     > main thread and then I create worker threads.
     > If server have one worker thread then error is not occur.
     >
     >
     > OS is CentOS, Poly/ML 5.7.2 Testing (Git version v5.7.1-161-g33045f8)
     >
     > #0  0x00007fbf878faa87 in get_stream(PolyWord) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #1  0x00007fbf878fac32 in writeArray(TaskData*, SaveVecEntry*,
     > SaveVecEntry*, bool) [clone .isra.7] () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #2  0x00007fbf878fc0be in IO_dispatch_c(TaskData*, SaveVecEntry*,
     > SaveVecEntry*, SaveVecEntry*) () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #3  0x00007fbf878fd2a1 in PolyBasicIOGeneral ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #4  0x000000000041406d in area1 ()
     > #5  0x0000000000002001 in ?? ()
     > #6  0x00007fbf87b57320 in ?? () from /home/nick/polyml/lib/libpolyml.so.9
     > #7  0x00007fbf81e49e30 in ?? ()
     > #8  0x0000000000006001 in ?? ()
     > #9  0x0000000000010008 in ?? ()
     > #10 0x00007fbf879171ed in Processes::FindAllocationSpace(TaskData*,
     > unsigned long, bool) () from /home/nick/polyml/lib/libpolyml.so.9
     > #11 0x00007fbf7c00a4d0 in ?? ()
     > #12 0x00007fbf81e4a660 in ?? ()
     > #13 0x00007fbf8792c9f1 in X86TaskData::SwitchToPoly() ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #14 0x00007fbf8792cbcc in X86TaskData::EnterPolyCode() ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #15 0x00007fbf87916fc9 in NewThreadFunction(void*) ()
     >
     >
     > ==============================================================
     >
     > This one more backtrace.
     >
     > #0  0x00007ff5a378ba87 in get_stream(PolyWord) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #1  0x00007ff5a379ef08 in getSelectResult(TaskData*, SaveVecEntry*,
     > int, WaitSelect*) () from /home/nick/polyml/lib/libpolyml.so.9
     > #2  0x00007ff5a379f481 in selectCall(TaskData*, SaveVecEntry*, int) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #3  0x00007ff5a37a03ed in Net_dispatch_c(TaskData*, SaveVecEntry*,
     > SaveVecEntry*) () from /home/nick/polyml/lib/libpolyml.so.9
     > #4  0x00007ff5a37a12f7 in PolyNetworkGeneral ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #5  0x00000000004078a2 in area1 ()
     > #6  0x0000000000002001 in ?? ()
     > #7  0x00007ff5a39e8320 in ?? () from /home/nick/polyml/lib/libpolyml.so.9
     > #8  0x00007ff59d4d9e30 in ?? ()
     > #9  0x000000000000a001 in ?? ()
     > #10 0x0000000000010008 in ?? ()
     > #11 0x00007ff5a37a81ed in Processes::FindAllocationSpace(TaskData*,
     > unsigned long, bool) () from /home/nick/polyml/lib/libpolyml.so.9
     > #12 0x00007ff59800c980 in ?? ()
     > #13 0x00007ff59d4da660 in ?? ()
     > #14 0x00007ff5a37bd9f1 in X86TaskData::SwitchToPoly() ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #15 0x00007ff5a37bdbcc in X86TaskData::EnterPolyCode() ()
     > ---Type <return> to continue, or q <return> to quit---
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #16 0x00007ff5a37a7fc9 in NewThreadFunction(void*) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #17 0x00007ff5a2968e25 in start_thread () from /lib64/libpthread.so.0
     > #18 0x00007ff5a2c7534d in clone () from /lib64/libc.so.6
     >
     >
     > ==============================================================
     >
     > This one more backtrace.
     >
     >
     > #0  0x00007f88d2be3a87 in get_stream(PolyWord) () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #1  0x00007f88d2be5b85 in IO_dispatch_c(TaskData*, SaveVecEntry*,
     > SaveVecEntry*, SaveVecEntry*) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #2  0x00007f88d2be62a1 in PolyBasicIOGeneral () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #3  0x000000000040580d in area1 ()
     > #4  0x0000000000002001 in ?? ()
     > #5  0x00007f88d2e40320 in ?? () from /home/nick/polyml/lib/libpolyml.so.9
     > #6  0x00007f88cc931e30 in ?? ()
     > #7  0x000000000000a001 in ?? ()
     > #8  0x0000000000010008 in ?? ()
     > #9  0x00007f88d2c001ed in Processes::FindAllocationSpace(TaskData*,
     > unsigned long, bool) () from /home/nick/polyml/lib/libpolyml.so.9
     > #10 0x00007f88c800c980 in ?? ()
     > #11 0x00007f88cc932660 in ?? ()
     > #12 0x00007f88d2c159f1 in X86TaskData::SwitchToPoly() () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #13 0x00007f88d2c15bcc in X86TaskData::EnterPolyCode() () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #14 0x00007f88d2bfffc9 in NewThreadFunction(void*) () from
     > /home/nick/polyml/lib/libpolyml.so.9
     > #15 0x00007f88d1dc0e25 in start_thread () from /lib64/libpthread.so.0
     > #16 0x00007f88d20cd34d in clone () from /lib64/libc.so.6
     >
     >
     > =====================================================================
     >
     > This one more backtrace.
     >
     >
     > #0  0x00007f1ed86fca87 in get_stream(PolyWord) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #1  0x00007f1ed8710209 in selectCall(TaskData*, SaveVecEntry*, int) ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #2  0x00007f1ed87113ed in Net_dispatch_c(TaskData*, SaveVecEntry*,
     > SaveVecEntry*) () from /home/nick/polyml/lib/libpolyml.so.9
     > #3  0x00007f1ed87122f7 in PolyNetworkGeneral ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #4  0x00000000004078a2 in area1 ()
     > #5  0x0000000000002001 in ?? ()
     > #6  0x00007f1ed8959320 in ?? () from /home/nick/polyml/lib/libpolyml.so.9
     > #7  0x00007f1ecdffae30 in ?? ()
     > #8  0x000000000000a001 in ?? ()
     > #9  0x0000000000010008 in ?? ()
     > #10 0x00007f1ed87191ed in Processes::FindAllocationSpace(TaskData*,
     > unsigned long, bool) () from /home/nick/polyml/lib/libpolyml.so.9
     > #11 0x00007f1ed000c980 in ?? ()
     > #12 0x00007f1ecdffb660 in ?? ()
     > #13 0x00007f1ed872e9f1 in X86TaskData::SwitchToPoly() ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #14 0x00007f1ed872ebcc in X86TaskData::EnterPolyCode() ()
     >     from /home/nick/polyml/lib/libpolyml.so.9
     > #15 0x00007f1ed8718fc9 in NewThreadFunction(void*) ()
     > _______________________________________________
     > polyml mailing list
     > polyml@inf.ed.ac.uk
     > http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
     >
     _______________________________________________
     polyml mailing list
     polyml@inf.ed.ac.uk
     http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to