Signal handler not reacting correctly on Fedora

Found a bug? Report it here.

Moderator: PPS-Leaders

Post Reply
smerkli
Human Space Navy Lieutenant
Posts: 20
Joined: Mon Mar 01, 2010 7:28 pm

Signal handler not reacting correctly on Fedora

Post by smerkli » Wed Nov 02, 2011 2:08 pm

[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.

User avatar
fmauro
Noxonian Grollknom
Posts: 7
Joined: Sun Oct 02, 2011 6:30 pm

Re: Signal handler not reacting correctly on Fedora

Post by fmauro » Wed Nov 02, 2011 2:26 pm

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) 

smerkli
Human Space Navy Lieutenant
Posts: 20
Joined: Mon Mar 01, 2010 7:28 pm

Re: Signal handler not reacting correctly on Fedora

Post by smerkli » Wed Nov 02, 2011 3:11 pm

- Make signal handler stop listening for signals as early as possible
- See if replacing usage of signal() with sigaction() fixes the problem

User avatar
1337
Baron Vladimir Harkonnen
Posts: 521
Joined: Wed Oct 10, 2007 7:59 am

Re: Signal handler not reacting correctly on Fedora

Post by 1337 » Fri Nov 04, 2011 3:29 am

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.
http://www.xkcd.com/
A webcomic of romance, sarcasm, math, and language.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests