#51 ✓resolved
Christopher Stawarz

Stimulus display blacks out upon loading new experiment

Reported by Christopher Stawarz | May 27th, 2010 @ 02:33 PM | in 0.4.4

This is happening with the 0.4.4rc5 build. I'm running on a two-monitor setup, with one of the monitors serving as a full-screen stimulus display. Both monitors are driven by a single NVIDIA GeForce 7300 GT graphics card. I'm running Mac OS X 10.6.3.

I can start up the client and server and load and run an experiment with no problem. However, if I close the experiment and load another (or the same experiment again), the stimulus display goes black, like it's been shut off. If I then close and load once more, the stimulus display is back to normal. I can repeat this failure/success pattern indefinitely. The behavior does not depend on the experiment(s) used.

Coincident with the display black out, the server spits out the following messages:

2010-05-27 15:00:31.817 MWServer[315:4a03] originalDisplayMode = {
    BitsPerPixel = 32;
    BitsPerSample = 8;
    Height = 1050;
    IODisplayModeID = 127;
    IOFlags = 7;
    Mode = 62;
    RefreshRate = 61;
    SamplesPerPixel = 3;
    UsableForDesktopGUI = 1;
    Width = 1680;
    kCGDisplayBytesPerRow = 7168;
    kCGDisplayModeIsSafeForHardware = 1;
}
Thu May 27 15:00:31 dicarlo23.mit.edu MWServer[315] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Thu May 27 15:00:31 dicarlo23.mit.edu MWServer[315] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
2010-05-27 15:00:31.833 MWServer[315:4a03] invalid fullscreen drawable

Running through the same scenario in gdb and breaking on CGErrorBreakpoint yields the following backtrace:

0x00007fff8247d883 in CGErrorBreakpoint ()
0x00007fff82507caa in CGSGlobalErrorv ()
0x00007fff8236c5ef in CGSGetSurfaceBounds ()
0x00007fff80c83782 in CGLSetOffScreen ()
0x00007fff80c83ac5 in CGLSetFullScreen ()
0x00007fff85be7537 in -[NSOpenGLContext setFullScreen] ()
0x0000000100089587 in mw::OpenGLContextManager::newFullScreenContext ()
0x0000000100059055 in mw::prepareStimulusDisplay ()
0x000000010004dee8 in mw::ExperimentFactory::createObject ()
0x000000010002e339 in mw::ComponentRegistry::createNewObject ()
0x000000010002e596 in mw::ComponentRegistry::registerNewObject ()
0x0000000100156424 in mw::XMLParser::_processGenericCreateDirective ()
0x000000010014b5a3 in mw::XMLParser::_processCreateDirective ()
0x000000010014bf24 in mw::XMLParser::_processNode ()
0x00000001001576e2 in mw::XMLParser::parse ()
0x000000010005b374 in mw::loadExperimentFromXMLParser ()
0x0000000100112765 in mw::StandardSystemEventHandler::handleSystemEvent ()
0x0000000100114159 in mw::StandardSystemEventHandler::handleEvent ()
0x00000001001470da in mw::EventListener::service ()
0x0000000100146c47 in readReader ()
0x00000001001480f8 in boost::_bi::list1<boost::_bi::value<boost::shared_ptr<mw::EventListener> > >::operator()<void*, void* (*)(boost::shared_ptr<mw::EventListener> const&), boost::_bi::list0> ()
0x0000000100148136 in boost::_bi::bind_t<void*, void* (*)(boost::shared_ptr<mw::EventListener> const&), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<mw::EventListener> > > >::operator() ()
0x0000000100148155 in boost::detail::function::function_obj_invoker0<boost::_bi::bind_t<void*, void* (*)(boost::shared_ptr<mw::EventListener> const&), boost::_bi::list1<boost::_bi::value<boost::shared_ptr<mw::EventListener> > > >, void*>::invoke ()
0x00000001149d6edf in boost::function0<void*>::operator() ()
0x00000001149d2121 in zen_scheduler::zenScheduledExecutionThread ()
0x00007fff845218b6 in _pthread_start ()
0x00007fff84521769 in thread_start ()

Comments and changes to this ticket

  • Christopher Stawarz

    Christopher Stawarz May 27th, 2010 @ 07:08 PM

    • Assigned user set to “Christopher Stawarz”

    Adding the following line at the beginning of OpenGLContextManager::releaseDisplays (right before CGReleaseAllDisplays) eliminates the problem:

    [contexts makeObjectsPerformSelector:@selector(clearDrawable)];
    

    Here's what the docs say about clearDrawable:

    This method disassociates the receiver from any associated NSView object. If the receiver is in full-screen or offscreen mode, it exits that mode.

  • Christopher Stawarz

    Christopher Stawarz May 28th, 2010 @ 01:13 PM

    • State changed from “new” to “resolved”

    Fixed in commit c70f9ceb0896b1a0823a0974a5cf3a39075da3a8

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.

New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile ยป

The core framework and supporting libraries for the MWorks Suite

People watching this ticket

Pages