プロジェクト

全般

プロフィール

バグ #4453

プログラムが終了しない

katami が約6年前に追加. 約6年前に更新.

ステータス:
担当
優先度:
通常
担当者:
katami
対象バージョン:
開始日:
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が存在する。

履歴

#1 katami が約6年前に更新

  • ステータス新規 から 担当 に変更
  • 担当者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 を発行して、優先度を下げて対応する。

#2 katami が約6年前に更新

  • 対象バージョンRELEASE_1_2_0 にセット
  • 進捗率0 から 100 に変更

他の形式にエクスポート: Atom PDF