操作
バグ #4453
未完了プログラムが終了しない
開始日:
2018/02/20
期日:
進捗率:
100%
予定工数:
説明
Java RTCを実行し,RT System Editorでexitしてもプログラムが終わらない。
RT System Editorのダイアグラム上からは消える。
さらに,一度activateしてdeactivateした後にexitすると以下のようなエラーメッセージを表示する
2 17, 2018 6:28:26 午後 com.sun.corba.se.impl.orb.ORBImpl checkShutdownState 警告: "IOP01600004: (BAD_INV_ORDER) ORB has shutdown" org.omg.CORBA.BAD_INV_ORDER: vmcid: OMG minor code: 4 completed: No at com.sun.corba.se.impl.logging.OMGSystemException.badOperationAfterShutdown(Unknown Source) at com.sun.corba.se.impl.logging.OMGSystemException.badOperationAfterShutdown(Unknown Source) at com.sun.corba.se.impl.orb.ORBImpl.checkShutdownState(Unknown Source) at com.sun.corba.se.spi.orb.ORB.getByteBufferPool(Unknown Source) at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.read(Unknown Source) at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.readGIOPHeader(Unknown Source) at com.sun.corba.se.impl.transport.CorbaContactInfoBase.createMessageMediator(Unknown Source) at com.sun.corba.se.impl.transport.SocketOrChannelAcceptorImpl.createMessageMediator(Unknown Source) at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.readBits(Unknown Source) at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.handleEvent(Unknown Source) at com.sun.corba.se.impl.transport.SelectorImpl.run(Unknown Source)
そして,終了しないまま止まってる。
タスクマネージャで見ると,java.exeが存在する。
katami さんがほぼ7年前に更新
- ステータス を 新規 から 担当 に変更
- 担当者 を katami にセット
調査¶
Compファイルのmain処理の最後までは処理は実行されている。
スレッドが終了していないことが考えられる。
ConsoleOutを起動して、rtexitを実行。
jstack コマンド で確認したところ、PeriodicExecutionContextがスレッドがの終了していないようである。
$ ./ConsoleOut.sh
$ rtexit localhost/ubuntu.host_cxt/ConsoleOut0.rtc $ jps 4923 Jps 1277 ConsoleOutComp $ jstack 1277 Full thread dump OpenJDK 64-Bit Server VM (25.151-b12 mixed mode): "Attach Listener" #18 daemon prio=9 os_prio=0 tid=0x00007ff698001000 nid=0xce8 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "p: default-threadpool; w: Idle" #17 daemon prio=5 os_prio=0 tid=0x00007ff67c003800 nid=0x51a in Object.wait() [0x00007ff67befd000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at com.sun.corba.se.impl.orbutil.threadpool.WorkQueueImpl.requestWork(WorkQueueImpl.java:141) - locked <0x00000000f5ad56a0> (a com.sun.corba.se.impl.orbutil.threadpool.WorkQueueImpl) at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:503) "PeriodicExecutionContext" #16 prio=5 os_prio=0 tid=0x00007ff6bc3d7800 nid=0x50a in Object.wait() [0x00007ff67bffe000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000f5d25240> (a java.lang.String) at java.lang.Object.wait(Object.java:502) at jp.go.aist.rtm.RTC.executionContext.PeriodicExecutionContext.svc(Unknown Source) - locked <0x00000000f5d25240> (a java.lang.String) at jp.go.aist.rtm.RTC.executionContext.PeriodicExecutionContext.run(Unknown Source) at java.lang.Thread.run(Thread.java:748) 以下省略
原因¶
RTCの終了処理(RTObject_impl::finalizeContexts())でECを終了していなかったため。
また、PeriodicExecutionContextで、スレッドの終了処理がされていなかったため。
エラーメッセージの件¶
エラーメッセージは exit をするだけでも発生する場合がある。
再現方法などはまだ不明。
エラーメッセージ(OMGマイナー・コード4)から orb.shutdown() で発生していると思われる。
ORBがシャットダウンの処理中に orb.destroy() 以外の処理を呼び出しているのではないかと思われる。
今回の修正により、RTCは終了するので、本件は、別のチケット #4455 を発行して、優先度を下げて対応する。
操作