#14323: libGAP messes with Python subprocesses
-----------------------------------+----------------------------------------
       Reporter:  jdemeyer         |         Owner:  was            
           Type:  defect           |        Status:  positive_review
       Priority:  blocker          |     Milestone:  sage-5.9       
      Component:  interfaces       |    Resolution:                 
       Keywords:  child processes  |   Work issues:                 
Report Upstream:  N/A              |     Reviewers:  Jeroen Demeyer 
        Authors:  Volker Braun     |     Merged in:                 
   Dependencies:                   |      Stopgaps:                 
-----------------------------------+----------------------------------------
Changes (by jdemeyer):

  * status:  needs_work => positive_review
  * reviewer:  => Jeroen Demeyer


Old description:

> I haven't figured out when/why, but this might happen:
> {{{
> sage -t devel/sage/sage/homology/simplicial_complex.py
> **********************************************************************
> File "devel/sage/sage/homology/simplicial_complex.py", line 3134, in
> sage.homology.simplicial_complex.SimplicialComplex.automorphism_group
> Failed example:
>     S.automorphism_group().is_isomorphic(SymmetricGroup(4))
> Exception raised:
>     Traceback (most recent call last):
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/doctest/forker.py", line 455, in _run
>         self.execute(example, compiled, test.globs)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/doctest/forker.py", line 811, in execute
>         exec compiled in globs
>       File "<doctest
> sage.homology.simplicial_complex.SimplicialComplex.automorphism_group[1]>",
> line 1, in <module>
>         S.automorphism_group().is_isomorphic(SymmetricGroup(Integer(4)))
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/homology/simplicial_complex.py", line 3155, in
> automorphism_group
>         [f.tuple() for f in self.facets()]])
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/graphs/generic_graph.py", line 16414, in
> automorphism_group
>         output.append(PermutationGroup([perm_group_elt(aa) for aa in a]))
>       File "refinement_graphs.pyx", line 941, in
> sage.groups.perm_gps.partn_ref.refinement_graphs.perm_group_elt
> (sage/groups/perm_gps/partn_ref/refinement_graphs.c:32796)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/groups/perm_gps/permgroup.py", line 653, in __call__
>         return self._element_class()(x, self, check=check)
>       File "permgroup_element.pyx", line 452, in
> sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__
> (sage/groups/perm_gps/permgroup_element.c:4490)
>       File "sage_object.pyx", line 474, in
> sage.structure.sage_object.SageObject._gap_
> (sage/structure/sage_object.c:4544)
>       File "sage_object.pyx", line 450, in
> sage.structure.sage_object.SageObject._interface_
> (sage/structure/sage_object.c:4144)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/interface.py", line 199, in __call__
>         return cls(self, x, name=name)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/expect.py", line 1280, in __init__
>         self._name = parent._create(value, name=name)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/interface.py", line 389, in _create
>         self.set(name, value)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1322, in set
>         out = self._eval_line(cmd, allow_use_file=True)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 730, in _eval_line
>         self._start()
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1170, in _start
>         gap_reset_workspace(verbose=False)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1496, in gap_reset_workspace
>         g = Gap(use_workspace_cache=False, max_workspace_size=None)
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1084, in __init__
>         max_workspace_size = _get_gap_memory_pool_size_MB()
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 292, in
> _get_gap_memory_pool_size_MB
>         pool = get_gap_memory_pool_size()
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 268, in
> get_gap_memory_pool_size
>         suggested_size = min(suggested_size,
> int(mem.virtual_memory_limit()/10))
>       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/misc/memory_info.py", line 131, in
> virtual_memory_limit
>         if platform.architecture()[0] == '32bit':
>       File
> "/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
> 1084, in architecture
>         output = _syscmd_file(executable, '')
>       File
> "/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
> 1032, in _syscmd_file
>         rc = f.close()
>     IOError: [Errno 10] No child processes
> **********************************************************************
> }}}
> Looking at a `strace`, this is because libGAP installs a `SIGCHLD` signal
> handler which interferes with Python's multiprocessing.

New description:

 I haven't figured out when/why, but this might happen:
 {{{
 sage -t devel/sage/sage/homology/simplicial_complex.py
 **********************************************************************
 File "devel/sage/sage/homology/simplicial_complex.py", line 3134, in
 sage.homology.simplicial_complex.SimplicialComplex.automorphism_group
 Failed example:
     S.automorphism_group().is_isomorphic(SymmetricGroup(4))
 Exception raised:
     Traceback (most recent call last):
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/doctest/forker.py", line 455, in _run
         self.execute(example, compiled, test.globs)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/doctest/forker.py", line 811, in execute
         exec compiled in globs
       File "<doctest
 sage.homology.simplicial_complex.SimplicialComplex.automorphism_group[1]>",
 line 1, in <module>
         S.automorphism_group().is_isomorphic(SymmetricGroup(Integer(4)))
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/homology/simplicial_complex.py", line 3155, in
 automorphism_group
         [f.tuple() for f in self.facets()]])
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/graphs/generic_graph.py", line 16414, in automorphism_group
         output.append(PermutationGroup([perm_group_elt(aa) for aa in a]))
       File "refinement_graphs.pyx", line 941, in
 sage.groups.perm_gps.partn_ref.refinement_graphs.perm_group_elt
 (sage/groups/perm_gps/partn_ref/refinement_graphs.c:32796)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/groups/perm_gps/permgroup.py", line 653, in __call__
         return self._element_class()(x, self, check=check)
       File "permgroup_element.pyx", line 452, in
 sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__
 (sage/groups/perm_gps/permgroup_element.c:4490)
       File "sage_object.pyx", line 474, in
 sage.structure.sage_object.SageObject._gap_
 (sage/structure/sage_object.c:4544)
       File "sage_object.pyx", line 450, in
 sage.structure.sage_object.SageObject._interface_
 (sage/structure/sage_object.c:4144)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/interface.py", line 199, in __call__
         return cls(self, x, name=name)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/expect.py", line 1280, in __init__
         self._name = parent._create(value, name=name)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/interface.py", line 389, in _create
         self.set(name, value)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 1322, in set
         out = self._eval_line(cmd, allow_use_file=True)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 730, in _eval_line
         self._start()
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 1170, in _start
         gap_reset_workspace(verbose=False)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 1496, in gap_reset_workspace
         g = Gap(use_workspace_cache=False, max_workspace_size=None)
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 1084, in __init__
         max_workspace_size = _get_gap_memory_pool_size_MB()
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 292, in
 _get_gap_memory_pool_size_MB
         pool = get_gap_memory_pool_size()
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/interfaces/gap.py", line 268, in get_gap_memory_pool_size
         suggested_size = min(suggested_size,
 int(mem.virtual_memory_limit()/10))
       File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
 packages/sage/misc/memory_info.py", line 131, in virtual_memory_limit
         if platform.architecture()[0] == '32bit':
       File
 "/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
 1084, in architecture
         output = _syscmd_file(executable, '')
       File
 "/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
 1032, in _syscmd_file
         rc = f.close()
     IOError: [Errno 10] No child processes
 **********************************************************************
 }}}
 Looking at a `strace`, this is because libGAP installs a `SIGCHLD` signal
 handler which interferes with Python's multiprocessing.

 '''spkg''' (originally on #14014):
 [http://www.stp.dias.ie/~vbraun/Sage/spkg/libgap-4.5.7.p2.spkg]

 (signal handler fix only, see
 
https://bitbucket.org/vbraun/libgap/commits/3f4ebd64fc1219858802173cd86b7910040fef36)

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14323#comment:7>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to