Page 1 of 1

Signal handler not reacting correctly on Fedora

Posted: Wed Nov 02, 2011 2:08 pm
by smerkli
[fmauro] found out that on Fedora 15, kernel 2.6.40.6 (64bit), if one quits the game after having launched a level, it hangs up and keeps calling its signal handler. (More specific output in the reply post by fmauro).

I think the problem might be in SignalHandler.cc:
http://www.orxonox.net/browser/code/tru ... Handler.cc

Code: Select all

    void SignalHandler::catchSignal( int sig )
    {
      sig_t handler = signal( sig, SignalHandler::sigHandler );

      assert( handler != SIG_ERR );

      SignalRec rec;
      rec.signal = sig;
      rec.handler = handler;

      sigRecList.push_front( rec );
    }
Because the man page of signal specifies that signal is not very platform-independent and its use should be avoided. One should rather use sigaction.

I'm not sure whether this could be the cause, but it would be worth checking out.

Re: Signal handler not reacting correctly on Fedora

Posted: Wed Nov 02, 2011 2:26 pm
by fmauro
The error only occurs if the game is quit from a loaded level or after returning to the Main Menu. I'll attach the logs.

Steps to reproduce:
- Start game
- Select random level
- Quit game from in-game menu

Resulting error:
- orxonox repeatedly prints "Received Signal: SIGABRT" to stdout and orxonox.log, doesn't quit the game.

Expected behavior:
- orxonox should simply quit

System:
Fedora 15 2.6.40.6-0.fc15.x86_64
Gnome Shell Window Manager

My Guess is gnome-shell causing problems.

orxonox.log

Code: Select all

14:53:15 Log file opened
14:53:15 Info: Opening log file /tmp/orxonox.log
14:53:15 Status: Welcome to Orxonox (v0.0.5 Arcturus)

[...]

14:53:16 Status (internal): -------------------- starting main loop --------------------

[...]

15:07:40 Status (internal): unloading state 'level'
15:07:40 Info (internal): player left level (id: 0, name: Player)
15:07:40 Info (internal): Remaining objects:
15:07:40 Info (internal): 0 objects remaining. Well done!
15:07:40 Status (internal): unloading state 'standalone'
15:07:40 Status (internal): loading state 'mainMenu'
15:07:40 Status: Loading main menu
15:07:44 Status (internal): unloading state 'mainMenu'
15:07:44 Status (internal): loading state 'standalone'
15:07:44 Status (internal): loading state 'level'
15:07:44 Status: Loading level
15:07:44 Info: Start loading asteroidField.oxw...
15:07:44 Info (internal): [loader] Mask: +BaseObject 
15:07:44 Warning (internal): Bad LevelInfo tag 'asteroidField' in asteroidField.oxw. Ignoring...
15:07:44 Info (internal): [notifications] NotificationQueue 'all' created.
15:07:44 Info (internal): [notifications] NotificationQueue 'info' created.
15:07:44 Info: Finished loading asteroidField.oxw.
15:07:44 Info (internal): player entered level (id: 0, name: Player)
15:07:44 Info (internal): [notifications] NotificationQueue "info": Press [Fire] to start the match
15:07:45 Info (internal): [notifications] NotificationQueue "info": Waiting for other players
15:07:45 Info (internal): [notifications] Notification command "clear" executed.
15:07:45 Info (internal): [notifications] Notification command "clear" executed.
15:09:23 Status (internal): unloading state 'level'
15:09:23 Info (internal): player left level (id: 0, name: Player)
15:09:23 Info (internal): Remaining objects:
15:09:23 Info (internal): 0 objects remaining. Well done!
15:09:23 Status (internal): unloading state 'standalone'
15:09:23 Status (internal): loading state 'mainMenu'
15:09:23 Status: Loading main menu
15:09:25 Status (internal): unloading state 'mainMenu'
15:09:25 Status (internal): loading state 'standalone'
15:09:25 Status (internal): loading state 'level'
15:09:25 Status: Loading level
15:09:25 Info: Start loading asteroidField.oxw...
15:09:25 Info (internal): [loader] Mask: +BaseObject 
15:09:25 Warning (internal): Bad LevelInfo tag 'asteroidField' in asteroidField.oxw. Ignoring...
15:09:25 Info (internal): [notifications] NotificationQueue 'all' created.
15:09:25 Info (internal): [notifications] NotificationQueue 'info' created.
15:09:25 Info: Finished loading asteroidField.oxw.
15:09:25 Info (internal): player entered level (id: 0, name: Player)
15:09:25 Info (internal): [notifications] NotificationQueue "info": Press [Fire] to start the match
15:09:26 Info (internal): [notifications] NotificationQueue "info": Waiting for other players
15:09:26 Info (internal): [notifications] Notification command "clear" executed.
15:09:26 Info (internal): [notifications] Notification command "clear" executed.
15:09:41 Status (internal): unloading state 'level'
15:09:41 Info (internal): player left level (id: 0, name: Player)
15:09:41 Info (internal): Remaining objects:
15:09:41 Info (internal): 0 objects remaining. Well done!
15:09:41 Status (internal): unloading state 'standalone'
15:09:41 Status (internal): loading state 'mainMenu'
15:09:41 Status: Loading main menu
15:14:15 Status: Exit
15:14:15 Status (internal): -------------------- finished main loop --------------------
15:14:15 Status (internal): unloading state 'mainMenu'
15:14:15 Status (internal): unloading state 'graphics'
15:14:15 Status (internal): unloading state 'root'
15:14:15 Status (internal): destroying Game object...
15:14:15 Status (internal): destroying Core object...
15:14:15 Status (internal): destroying scope... (1)
15:14:15 Status (internal): destroyed scope (1)
15:14:15 Status (internal): destroying GUIManager...
15:14:15 Error (internal): [cegui] CEGUI::InvalidRequestException in file CEGUIWindowManager.cpp(101) : WindowManager::createWindow - WindowManager is in the locked state.
15:14:15 Error: Exception caught in main(): WindowManager::createWindow - WindowManager is in the locked state.
15:14:15 Error: Exception caught in main(): WindowManager::createWindow - WindowManager is in the locked state.Received signal SIGABRT
15:14:15 Error: Exception caught in main(): WindowManager::createWindow - WindowManager is in the locked state.Received signal SIGABRTReceived signal SIGABRT
15:14:15 Error: Exception caught in main(): WindowManager::createWindow - WindowManager is in the locked state.Received signal SIGABRTReceived signal SIGABRTReceived signal SIGABRT
15:14:15 Error: Exception caught in main(): WindowManager::createWindow - WindowManager is in the locked state.Received signal SIGABRTReceived signal SIGABRTReceived signal SIGABRTReceived signal SIGABRT
15:14:15 Error: Exception caught in main(): WindowManager::createWindow - WindowManager is in the locked state.Received signal SIGABRTReceived signal SIGABRTReceived signal SIGABRTReceived signal SIGABRTReceived signal SIGABRT
[continues with same message]
orxonox_crash.log

Code: Select all

=======================================================
= time: Wed Nov  2 14:26:02 2011
=======================================================
Program received signal SIGABRT, Aborted.
0x0000003b486352d5 in raise () from /lib64/libc.so.6
(gdb) 
#0  0x0000003b486352d5 in raise () from /lib64/libc.so.6
#1  0x0000003b48636b70 in abort () from /lib64/libc.so.6
#2  0x0000003b4862dc5e in __assert_fail_base () from /lib64/libc.so.6
#3  0x0000003b4862dd02 in __assert_fail () from /lib64/libc.so.6
#4  0x00007f05006f5dd9 in orxonox::MobileEntity::isCollisionTypeLegal (this=0x3f4c9e0, type=orxonox::WorldEntity::Static) at /home/fmauro/orxonox/environment/src/orxonox/worldentities/MobileEntity.cc:192
#5  0x00007f05006d1304 in orxonox::WorldEntity::setCollisionType (this=0x3f4c9e0, type=orxonox::WorldEntity::Static) at /home/fmauro/orxonox/environment/src/orxonox/worldentities/WorldEntity.cc:806
#6  0x00007f05006d193f in orxonox::WorldEntity::setCollisionTypeStr (this=0x3f4c9e0, typeStr="static") at /home/fmauro/orxonox/environment/src/orxonox/worldentities/WorldEntity.cc:890
#7  0x00007f05006dbdca in orxonox::detail::FunctorCaller<void, orxonox::WorldEntity, false, std::string const&, void, void, void, void>::call (functionPointer=(void (orxonox::WorldEntity::*)(orxonox::WorldEntity * const, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &)) 0x7f05006d16d4 <orxonox::WorldEntity::setCollisionTypeStr(std::string const&)>, object=0x3f4c9e0, param1=...) at /home/fmauro/orxonox/environment/src/libraries/core/command/Functor.h:422
#8  0x00007f05006d8f35 in orxonox::FunctorTemplate<void, orxonox::WorldEntity, false, std::string const&, void, void, void, void>::operator() (this=0x3f46ef0, object=0x3f4c9e0, param1=..., param2=..., param3=..., param4=..., param5=...) at /home/fmauro/orxonox/environment/src/libraries/core/command/Functor.h:501
#9  0x00007f05006d7478 in orxonox::FunctorMember<orxonox::WorldEntity>::operator() (this=0x3f46ef0, param1=..., param2=..., param3=..., param4=..., param5=...) at /home/fmauro/orxonox/environment/src/libraries/core/command/Functor.h:255
#10 0x00007f04feb98d32 in orxonox::Executor::parse (this=0x3f46f30, arguments=..., error=0x7fff9fcaae2c, delimiter=",", bPrintError=false) at /home/fmauro/orxonox/environment/src/libraries/core/command/Executor.cc:116
#11 0x00007f04feb987fa in orxonox::Executor::parse (this=0x3f46f30, arguments="static", error=0x7fff9fcaae2c, delimiter=",", bPrintError=false) at /home/fmauro/orxonox/environment/src/libraries/core/command/Executor.cc:85
#12 0x00007f05006d4ce5 in orxonox::ExecutorMember<orxonox::WorldEntity>::parse (this=0x3f46f30, object=0x3f4c9e0, arguments="static", error=0x7fff9fcaae2c, delimiter=",", bPrintError=false) at /home/fmauro/orxonox/environment/src/libraries/core/command/Executor.h:256
#13 0x00007f05006d39ff in orxonox::XMLPortClassParamContainer<orxonox::WorldEntity>::port (this=0x3f47080, owner=0x3f4c9e0, object=0x3f4c9e0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/XMLPort.h:419
#14 0x00007f05006ca892 in orxonox::WorldEntity::XMLPort (this=0x3f4c9e0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/orxonox/worldentities/WorldEntity.cc:166
#15 0x00007f050043ed2e in orxonox::SuperFunctionClassCaller_XMLPort<orxonox::WorldEntity>::operator() (this=0x21efb20, object=0x3f4cdf8, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/Super.h:524
#16 0x00007f05006f3ee0 in orxonox::MobileEntity::XMLPort (this=0x3f4c9e0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/orxonox/worldentities/MobileEntity.cc:57
#17 0x00007f050070088c in orxonox::SuperFunctionClassCaller_XMLPort<orxonox::MobileEntity>::operator() (this=0x2173590, object=0x3f4cdf8, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/Super.h:524
#18 0x00007f05006e7642 in orxonox::MovableEntity::XMLPort (this=0x3f4c9e0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/orxonox/worldentities/MovableEntity.cc:68
#19 0x00007f04feb0772f in orxonox::XMLPortObjectContainer::port (this=0x3f42cc0, object=0x3928a30, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/XMLPort.cc:107
#20 0x00007f05003a3f14 in orxonox::Scene::XMLPort (this=0x3928a30, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/orxonox/Scene.cc:124
#21 0x00007f04feb0772f in orxonox::XMLPortObjectContainer::port (this=0x3785ba0, object=0x377d4e0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/XMLPort.cc:107
#22 0x00007f0500332b06 in orxonox::Level::XMLPort (this=0x377d4e0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/orxonox/Level.cc:77
#23 0x00007f04feb0772f in orxonox::XMLPortObjectContainer::port (this=0x2273f00, object=0x374beb0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/XMLPort.cc:107
#24 0x00007f04fead349a in orxonox::Namespace::XMLPort (this=0x374beb0, xmlelement=..., mode=orxonox::XMLPort::LoadObject) at /home/fmauro/orxonox/environment/src/libraries/core/Namespace.cc:100
#25 0x00007f04feabe7c0 in orxonox::Loader::load (file=0x2da8c60, mask=..., bVerbose=true, bRemoveLuaTags=false) at /home/fmauro/orxonox/environment/src/libraries/core/Loader.cc:216
#26 0x00007f04feabdb9d in orxonox::Loader::open (file=0x2da8c60, mask=..., bVerbose=true) at /home/fmauro/orxonox/environment/src/libraries/core/Loader.cc:54
#27 0x00007f050045d87d in orxonox::GSLevel::loadLevel (this=0x223bfa0) at /home/fmauro/orxonox/environment/src/orxonox/gamestates/GSLevel.cc:160
#28 0x00007f050045d31a in orxonox::GSLevel::activate (this=0x223bfa0) at /home/fmauro/orxonox/environment/src/orxonox/gamestates/GSLevel.cc:95
#29 0x00007f04feaaa787 in orxonox::GameState::activateInternal (this=0x223bfa0) at /home/fmauro/orxonox/environment/src/libraries/core/GameState.cc:75
#30 0x00007f04fea96643 in orxonox::Game::loadState (this=0x217b740, name="level") at /home/fmauro/orxonox/environment/src/libraries/core/Game.cc:596
#31 0x00007f04fea93d8c in orxonox::Game::updateGameStateStack (this=0x217b740) at /home/fmauro/orxonox/environment/src/libraries/core/Game.cc:256
#32 0x00007f04fea93899 in orxonox::Game::run (this=0x217b740) at /home/fmauro/orxonox/environment/src/libraries/core/Game.cc:199
#33 0x00007f0500376007 in orxonox::main (strCmdLine="") at /home/fmauro/orxonox/environment/src/orxonox/Main.cc:108
#34 0x000000000040408a in main (argc=1, argv=0x7fff9fcae1e8) at /home/fmauro/orxonox/environment/src/Orxonox.cc:85
(gdb) 
Kill the program being debugged? (y or n) [answered Y; input not from terminal]
(gdb) 

Re: Signal handler not reacting correctly on Fedora

Posted: Wed Nov 02, 2011 3:11 pm
by smerkli
- Make signal handler stop listening for signals as early as possible
- See if replacing usage of signal() with sigaction() fixes the problem

Re: Signal handler not reacting correctly on Fedora

Posted: Fri Nov 04, 2011 3:29 am
by 1337
You might be on your own with this one.

The Linux part of the SignalHandler was written about 6 years ago for the first version of Orxonox. Fabian then added the Windows part about a year ago and may have adjusted the output in the Linux part, but he probably didn't change the implementation at all.
And I'm no Linux guy at all.