Ticket #670 (closed defect: fixed)
Clicking to transfer goods makes the game crash
| Reported by: | Quassy | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 2010.1 |
| Component: | Code:Game | Keywords: | |
| Cc: | Version + SVN ref: | ||
| Blocked By: | Python Version: | ||
| Hardware Architecture: | All | Operating System: | All |
| Blocking: |
Description
Clicking on the tab (of the ship) with a box on it to transfer goods makes the game crash. It only works some (rare) times.
{{{# Ubuntu 10.04 32bit, Python 2.6.5, Built from source using svn # Starting Unknown Horizons in debug mode Executing with proper fife path: "gdb" with args ['gdb', '--args', 'python', './unknown-horizons'] GNU gdb (GDB) 7.1-ubuntu Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later < http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i486-linux-gnu". For bug reporting instructions, please see: < http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/python...(no debugging symbols found)...done. (gdb) r Starting program: /usr/bin/python ./unknown-horizons [Thread debugging using libthread_db enabled] [New Thread 0xb6ef3b70 (LWP 26046)] [Thread 0xb6ef3b70 (LWP 26046) exited] [New Thread 0xb6ef3b70 (LWP 26047)] [New Thread 0xb601cb70 (LWP 26048)] [New Thread 0xb0f5ab70 (LWP 26050)] [Thread 0xb0f5ab70 (LWP 26050) exited]
File "~/UnknownHorizons/fife/trunk/engine/python/fife/extensions/fife_timer.py", line 112, in updateEvent
self._callback()
File "~/UnknownHorizons/fife/trunk/engine/python/fife/extensions/pychan/events.py", line 158, in delayed_f
f( event )
File "~/UnknownHorizons/fife/trunk/engine/python/fife/extensions/pychan/events.py", line 308, in captured_f
tools.applyOnlySuitable(self_ref().callbacks[group_name][event_name],event=event,widget=self_ref().widget_ref())
File "~/UnknownHorizons/fife/trunk/engine/python/fife/extensions/pychan/tools.py", line 60, in applyOnlySuitable
return func(*args,kwargs)
File "~/UnknownHorizons/fife/trunk/engine/python/fife/extensions/pychan/tools.py", line 83, in real_callback
callback(*args,kwargs)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/tabs/tabwidget.py", line 97, in _show_tab
self.show()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/tabs/tabwidget.py", line 107, in show
self._draw_widget()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/tabs/tabwidget.py", line 103, in _draw_widget
self.current_tab.refresh()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/tabs/inventorytab.py", line 71, in refresh
events = { 'trade': pychan.tools.callbackWithArguments(self.instance.session.ingame_gui.show_menu, TradeWidget?(self.instance)) }
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/tradewidget.py", line 70, in init
self.draw_widget()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/tradewidget.py", line 85, in draw_widget
inv_partner.init(self.instance.db, self.partner.inventory)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/inventory.py", line 45, in init
self.update()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/inventory.py", line 49, in update
self._draw()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/inventory.py", line 61, in _draw
if not self.db.cached_query('SELECT shown_in_inventory FROM resource WHERE id = ?', resid)[0][0]:
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/python/decorators.py", line 61, in call
self.cache[(instance,args)] = value = self.func(instance, *args)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/dbreader.py", line 55, in cached_query
return self(command, *args)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/dbreader.py", line 48, in call
self.cur.execute(command, args)
ProgrammingError?: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id -1326077072 and this is thread id -1208064320
Traceback (most recent call last):
File "./unknown-horizons", line 405, in <module>
main()
File "./unknown-horizons", line 183, in main
ret = horizons.main.start(options)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/main.py", line 153, in start
fife.run()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/engine.py", line 304, in run
self.loop()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/engine.py", line 312, in loop
self.engine.pump()
File "~/UnknownHorizons/fife/trunk/engine/python/fife/fife.py", line 1883, in pump
return _fife.Engine_pump(self)
RuntimeError?: Catched director exception AL lib: ALc.c:1879: exit(): closing 1 Device AL lib: ALc.c:1808: alcCloseDevice(): destroying 1 Context(s) AL lib: ALc.c:1420: alcDestroyContext(): deleting 49 Source(s) [Thread 0xb601cb70 (LWP 26048) exited] AL lib: ALc.c:1818: alcCloseDevice(): deleting 25 Buffer(s) [Thread 0xb6ef3b70 (LWP 26047) exited]
Program exited with code 01. (gdb) bt No stack. (gdb) q}}}
Change History
comment:1 Changed 5 weeks ago by eoc
- Component changed from Unspecified to Code:Game
- Milestone set to 2010.1
comment:2 Changed 5 weeks ago by Quassy
I was able to click on the goods-tab when I was out of the range of my settlement, but then I moved my ship near the Kontor / "branch office" the game crashed again.
(gdb) r
Starting program: /usr/bin/python ./unknown-horizons
[Thread debugging using libthread_db enabled]
[New Thread 0xb6ef3b70 (LWP 26513)]
[Thread 0xb6ef3b70 (LWP 26513) exited]
[New Thread 0xb6ef3b70 (LWP 26514)]
[New Thread 0xb601cb70 (LWP 26515)]
[New Thread 0xb0f5ab70 (LWP 26516)]
[Thread 0xb0f5ab70 (LWP 26516) exited]
Traceback (most recent call last):
File "./unknown-horizons", line 405, in <module>
main()
File "./unknown-horizons", line 183, in main
ret = horizons.main.start(options)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/main.py", line 153, in start
fife.run()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/engine.py", line 304, in run
self.loop()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/engine.py", line 317, in loop
f()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/timer.py", line 107, in check_tick
f(self.tick_next_id)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/scheduler.py", line 67, in tick
callback.callback()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/world/units/ship.py", line 62, in _move_tick
super(Ship, self)._move_tick()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/world/units/movingobject.py", line 167, in _move_tick
self._changed()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/changelistener.py", line 66, in _changed
listener()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/python/weakmethod.py", line 40, in __call__
return self.function(self.instance(), *args, **kwargs)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/tabs/inventorytab.py", line 71, in refresh
events = { 'trade': pychan.tools.callbackWithArguments(self.instance.session.ingame_gui.show_menu, TradeWidget(self.instance)) }
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/tradewidget.py", line 70, in __init__
self.draw_widget()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/tradewidget.py", line 85, in draw_widget
inv_partner.init(self.instance.db, self.partner.inventory)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/inventory.py", line 45, in init
self.update()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/inventory.py", line 49, in update
self._draw()
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/gui/widgets/inventory.py", line 61, in _draw
if not self.db.cached_query('SELECT shown_in_inventory FROM resource WHERE id = ?', resid)[0][0]:
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/python/decorators.py", line 61, in __call__
self.cache[(instance,args)] = value = self.func(instance, *args)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/dbreader.py", line 55, in cached_query
return self(command, *args)
File "~/UnknownHorizons/UnknownHorizons/trunk/horizons/util/dbreader.py", line 48, in __call__
self.cur.execute(command, args)
sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id -1326077072 and this is thread id -1208064320
AL lib: ALc.c:1879: exit(): closing 1 Device
AL lib: ALc.c:1808: alcCloseDevice(): destroying 1 Context(s)
AL lib: ALc.c:1420: alcDestroyContext(): deleting 102 Source(s)
[Thread 0xb601cb70 (LWP 26515) exited]
AL lib: ALc.c:1818: alcCloseDevice(): deleting 27 Buffer(s)
[Thread 0xb6ef3b70 (LWP 26514) exited]
Program exited with code 01.
(gdb) bt
No stack.
(gdb) q
comment:4 Changed 5 weeks ago by totycro
- Status changed from new to closed
- Resolution set to fixed
(In [3631]) Don't save db obj in UnitClass?, etc., cause it makes it available during the game, which runs in a different thread than the game. fixes #670

I myself get it everytime I want to start any map, some others experience it when preloading is finished (cf. wait some seconds before clicking actual "start" button).