Ticket #670 (closed defect: fixed)

Opened 5 weeks ago

Last modified 5 weeks ago

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

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

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:3 Changed 5 weeks ago by totycro

(In [3629]) Quick fix for #670 Still needs proper fix refs #670

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

Note: See TracTickets for help on using tickets.