バグ #4453
未完了
katami さんがほぼ7年前に追加.
ほぼ7年前に更新.
説明
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 にセット
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 を発行して、優先度を下げて対応する。
- 対象バージョン を RELEASE_1_2_0 にセット
- 進捗率 を 0 から 100 に変更
他の形式にエクスポート: Atom
PDF