[Piglit] glx-multithread-shader-compile hung

Jose Fonseca jfonseca at vmware.com
Thu Aug 1 09:14:02 PDT 2013



----- Original Message -----
> On Wednesday, July 31, 2013 08:16:25 Jose Fonseca wrote:
> > FYI, I twice now got deadlock on glx-multithread-shader-compile on my
> > continuous testing of Mesa:
> > 
> >   ...
> >   [Sat Jul 20 01:18:20 2013] ::  running ::
> > glx/glx-multithread-shader-compile  <-- last piglit message Build timed out
> > (after 120 minutes). Marking the build as failed.   <-- Jenkins message
> > 
> > I'm going to disable the test on my custom test list.  But I believe that
> > if
> > we're going to add multi-threaded tests to piglit, then we should have a
> > per-test timeout (ie, after a threshold time like 5min the framework should
> > kill the process and mark the test as failed).  Otherwise these race
> > condition tests do more harm than good -- as they prevent all other tests
> > from running.
> 
> A timeout looks perfect.
> May be the attached patch helps to keep this test in mind :-)
> 
> Mathias

I think this would be better done in python framework, so it could be used for all tests transparently.

FWIW, here is a snippet of how I did a similar thing on a different test suite:

        p = subprocess.Popen(...)

        # See also 
        # - http://bugs.python.org/issue5673
        # - http://stackoverflow.com/questions/337863/python-popen-and-select-waiting-for-a-process-to-terminate-or-a-timeout
        # - http://stackoverflow.com/questions/1191374/subprocess-with-timeout
        if self._timeout:
            import signal

            def _handle_timeout(signum, frame): 
                self._timedout = True
                os.kill(p.pid, signal.SIGKILL)

            old_handler = signal.signal(signal.SIGALRM, _handle_timeout) 
            signal.alarm(self._timeout)
            try: 
                self.stdout, self.stderr = p.communicate()
            finally: 
                signal.signal(signal.SIGALRM, old_handler)
                signal.alarm(0)

            if self._timedout:
                raise TimeOutError

Jose


More information about the Piglit mailing list