euslisp / jskeus

This repository contains EusLisp software developed and used by JSK at The University of Tokyo
23 stars 55 forks source link

(x::window-main-one)をthread内で呼んでIRTビューアをクリックで動かすとエラー #85

Open mmurooka opened 10 years ago

mmurooka commented 10 years ago

以下をroseusで実行し,IRTビューアをクリックして視点変更すると, 以下のようなエラーがでてroseusが終了してしまいます. ビューアをクリックしない限りはエラーは出ません.

(defun tmp () (while t (x::window-main-one)))
(sys:make-thread 1)
(sys:thread #'tmp)
;; in gl:glclear
;; You are still in a signal handler.
;;Try reset or throw to upper level as soon as possible.
;; code=1164050480 x=4561ff00 addr=6e90ca0
Fatal: irteusgl: ../../intel/intel_bufmgr_gem.c:1112: drm_intel_gem_bo_unreference_locked_timed: Assertion `((&bo_gem->refcount)->atomic) > 0' failed.
中止
garaemon commented 10 years ago

gdbしてみるとどうなりますか?

2014年5月8日木曜日、Masaki Murookanotifications@github.comさんは書きました:

以下をroseusで実行し,IRTビューアをクリックして視点変更すると, 以下のようなエラーがでてroseusが終了してしまいます. ビューアをクリックしない限りはエラーは出ません.

(defun tmp () (while t (x::window-main-one))) (sys:make-thread 1) (sys:thread #'tmp)

;; in gl:glclear ;; You are still in a signal handler. ;;Try reset or throw to upper level as soon as possible. ;; code=1164050480 x=4561ff00 addr=6e90ca0 Fatal: irteusgl: ../../intel/intel_bufmgr_gem.c:1112: drm_intel_gem_bo_unreference_locked_timed: Assertion `((&bo_gem->refcount)->atomic) > 0' failed. 中止

— Reply to this email directly or view it on GitHubhttps://github.com/euslisp/jskeus/issues/85 .

from iPhone

mmurooka commented 10 years ago

以下のようになりました.

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffed810700 (LWP 3291)]
0x00007fffee20ac2a in _mesa_reference_program_ ()
   from /usr/lib/x86_64-linux-gnu/libdricore9.0.0.so.1

しか出てこないのでeusのコンパイル時に -gオプション を付けたら良さそうでしょうか.

murooka@murooka-ThinkPad-T430:~$ gdb /home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin/irteusgl
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 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 "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin/irteusgl...done.
(gdb) run "(pushnew \"/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/roseus/euslisp/\" *load-path* :test #'equal) roseus.l eustf.l actionlib.l roseus-utils.l"
Starting program: /home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin/irteusgl "(pushnew \"/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/roseus/euslisp/\" *load-path* :test #'equal) roseus.l eustf.l actionlib.l roseus-utils.l"
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
set ARCHDIR to Linux64
use the location of executables to set EUSDIR
set EUSDIR to /home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus
configuring by "/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin 
connected to Xserver DISPLAY=:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtpointcloud irtx eusjpeg euspng png irtimage irtglrgb 
;; extending gcstack 0x47abde0[16374] --> 0x4c09300[32748] top=3767
irtgl irtviewer 
EusLisp 9.00(fcc6e04 0140229) for Linux64 created on murooka-ThinkPad-T430(Sat Apr 12 22:56:23 JST 2014)
1.irteusgl$ make-irtviewer
#<x::irtviewer #X47c7080 IRT viewer>
2.irteusgl$ (defun tmp () (while t (x::window-main-one)))
(sys:make-thread 1)
(sys:thread #'tmp)
tmp
3.irteusgl$ [New Thread 0x7fffed810700 (LWP 3291)]
(#<thread #X47bede8>)
4.irteusgl$ #<thread #X47bede8>
5.irteusgl$ 
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffed810700 (LWP 3291)]
0x00007fffee20ac2a in _mesa_reference_program_ ()
   from /usr/lib/x86_64-linux-gnu/libdricore9.0.0.so.1
(gdb) quit
YoheiKakiuchi commented 10 years ago

(gdb) bt するともっと見えないかな? 少なくとも呼び出した関数ぐらいは分かる気がする。

これは、どういう時に必要になってくるかな? 複数スレッドから、描画を変更しようとするような事になってると、排他制御が必要になるかと思います。

mmurooka commented 10 years ago

(gdb) bt してみました.

#0  0x00007fffee27e816 in _mesa_meta_end ()
   from /usr/lib/x86_64-linux-gnu/libdricore9.0.0.so.1
#1  0x00007fffee27fd37 in _mesa_meta_glsl_Clear ()
   from /usr/lib/x86_64-linux-gnu/libdricore9.0.0.so.1
#2  0x00007fffee650154 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
#3  0x00000000004169dc in exec_function_i ()
#4  0x0000000004dfbcd0 in ?? ()
#5  0x0000000005a84501 in ?? ()
#6  0x0000000005a84501 in ?? ()
#7  0x00007fffee10bd9c in _mesa_update_draw_buffers ()
   from /usr/lib/x86_64-linux-gnu/libdricore9.0.0.so.1
#8  0x00007fffee10f83a in _mesa_make_current ()
   from /usr/lib/x86_64-linux-gnu/libdricore9.0.0.so.1
#9  0x00007ffff653a104 in _L_unlock_644 ()
   from /lib/x86_64-linux-gnu/libpthread.so.0
#10 0x00007ffff653a063 in pthread_mutex_unlock ()
   from /lib/x86_64-linux-gnu/libpthread.so.0
#11 0x00000000c3c8cd9f in ?? ()
#12 0x00000000047a2228 in ?? ()
#13 0x00007ffff7412a40 in glDrawBuffer ()
   from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#14 0x408061de9f3842bd in ?? ()
#15 0x0000000100000000 in ?? ()
#16 0x40690000bf27f37c in ?? ()
#17 0x0000000000000000 in ?? ()
mmurooka commented 10 years ago

これは、どういう時に必要になってくるかな? 複数スレッドから、描画を変更しようとするような事になってると、排他制御が必要になるかと思います。

gazeboの物体位置をsubscribeしてeusモデルに反映させるのを mainとは別のスレッドでやりつつ, シミュレーション一時停止,再開,モデルの瞬間移動のようなメタ的な指令を mainスレッドのインタプリタから送りたいと考えています.

garaemon commented 10 years ago

eusdynaの実装をみてみてはどうでしょうか?

2014年5月8日木曜日、Masaki Murookanotifications@github.comさんは書きました:

これは、どういう時に必要になってくるかな? 複数スレッドから、描画を変更しようとするような事になってると、排他制御が必要になるかと思います。

gazeboの物体位置をsubscribeしてeusモデルに反映させるのを mainとは別のスレッドでやりつつ, シミュレーション一時停止,再開,モデルの瞬間移動のようなメタ的な指令を mainスレッドのインタプリタから送りたいと考えています.

— Reply to this email directly or view it on GitHubhttps://github.com/euslisp/jskeus/issues/85#issuecomment-42506692 .

from iPhone

k-okada commented 10 years ago

この問題そのものは治したいところですが,rosになってから基本はマルチプロセスで対応するというのが方向性に思います. piped-forkして評価させる方法 (/euslib/demo/inaba/robots/test-pipedfork.l ) あるいはirteus/irtx.lのようにtop-selectorをつかって定期的に実行出来たかと思う. が,いいと思います.

2014-05-08 12:45 GMT+09:00 Ryohei Ueda notifications@github.com:

eusdynaの実装をみてみてはどうでしょうか?

2014年5月8日木曜日、Masaki Murookanotifications@github.comさんは書きました:

これは、どういう時に必要になってくるかな? 複数スレッドから、描画を変更しようとするような事になってると、排他制御が必要になるかと思います。

gazeboの物体位置をsubscribeしてeusモデルに反映させるのを mainとは別のスレッドでやりつつ, シミュレーション一時停止,再開,モデルの瞬間移動のようなメタ的な指令を mainスレッドのインタプリタから送りたいと考えています.

— Reply to this email directly or view it on GitHub< https://github.com/euslisp/jskeus/issues/85#issuecomment-42506692> .

from iPhone

— Reply to this email directly or view it on GitHubhttps://github.com/euslisp/jskeus/issues/85#issuecomment-42510741 .