(第23回)GDBのスレッド対応(その6:ちょっとバグ修正)

2007/11/24

あなたは 人目のお客様です.

前回まででスレッド対応は完了のはずだったのだけど,ちょっとバグがあったので 修正.

前回のソースコードで info threads を2回実行すると,以下のようになる.

(gdb) info threads
  7 Thread 135026528 ( Name: httpd, State: SLP, Priority: 09)  0x0805eeb7 in kill ()
  6 Thread 135025760 ( Name: telnetd, State: SLP, Priority: 08)  0x0805eeb7 in kill ()
  5 Thread 135024992 ( Name: clock, State: SLP, Priority: 07)  0x0805eeb7 in kill ()
  4 Thread 135024224 ( Name: idle, State: RUN, Priority: 1f)  0x0806095b in select ()
  3 Thread 135023456 ( Name: outlog, State: SLP, Priority: 03)  0x0805eeb7 in kill ()
  2 Thread 135021920 ( Name: extintr, State: SLP, Priority: 01)  0x0805eeb7 in kill ()
* 1 Thread 135022688 ( Name: stubd, State: RUN, Priority: 02)  breakpoint ()
    at i386-stub.c:1187
(gdb) info threads
  8 Thread -1 ( Name: stubd, State: RUN, Priority: 02)  breakpoint ()
    at i386-stub.c:1187
  7 Thread 135026528 ( Name: httpd, State: SLP, Priority: 09)  0x0805eeb7 in kill ()
  6 Thread 135025760 ( Name: telnetd, State: SLP, Priority: 08)  0x0805eeb7 in kill ()
  5 Thread 135024992 ( Name: clock, State: SLP, Priority: 07)  0x0805eeb7 in kill ()
  4 Thread 135024224 ( Name: idle, State: RUN, Priority: 1f)  0x0806095b in select ()
  3 Thread 135023456 ( Name: outlog, State: SLP, Priority: 03)  0x0805eeb7 in kill ()
  2 Thread 135021920 ( Name: extintr, State: SLP, Priority: 01)  0x0805eeb7 in kill ()
* 1 Thread 135022688 ( Name: stubd, State: RUN, Priority: 02)  breakpoint ()
    at i386-stub.c:1187
(gdb) 
2回目の info threads で,スレッド番号8としてなんかスレッドIDが-1の stubd というのが出てしまっている.stubd はスレッド番号1ですでに出ているので, これは明らかにおかしい.

このときの通信内容は以下.

($T054:58f60e08;5:58f60e08;8:65af0408;thread:080c4860;#7d)[+]
[$M8048088,1:55#c2](+)($OK#9a)[+]
[$T080c4860#21](+)($OK#9a)[+]
[$qfThreadInfo#bb](+)($#00)[+]
[$qL1200000000000000000#50](+)($qM010000000000000000000000000080c4560#99)[+]
[$qL02000000000080c4560#99](+)($qM01000000000080c456000000000080c4860#e6)[+]
[$qL02000000000080c4860#9c](+)($qM01000000000080c486000000000080c4b60#13)[+]
[$qL02000000000080c4b60#c6](+)($qM01000000000080c4b6000000000080c4e60#40)[+]
[$qL02000000000080c4e60#c9](+)($qM01000000000080c4e6000000000080c5160#10)[+]
[$qL02000000000080c5160#96](+)($qM01000000000080c516000000000080c5460#e0)[+]
[$qL02000000000080c5460#99](+)($qM01000000000080c546000000000080c5760#e6)[+]
[$qL02000000000080c5760#9c](+)($qM01100000000080c5760#9d)[+]
[$qThreadExtraInfo,80c5760#22](+)($#00)[+]
[$qP0000001f00000000080c5760#c5](+)($QP0000001f00000000080c5760000000011000000000080c5760000000020110000000403SLP0000000805httpd000000100209#1b)[+]
[$Hg80c5760#4c](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000060570c08fcc5110818c61108ecc7110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#1b)[+]
[$qP0000001f00000000080c5460#c2](+)($QP0000001f00000000080c5460000000011000000000080c5460000000020110000000403SLP0000000807telnetd000000100208#e2)[+]
[$Hg80c5460#49](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000060540c08fc35110818361108ec37110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#88)[+]
[$qP0000001f00000000080c5160#bf](+)($QP0000001f00000000080c5160000000011000000000080c5160000000020110000000403SLP0000000805clock000000100207#f5)[+]
[$Hg80c5160#46](+)($OK#9a)[+]
[$g#67](+)($0000000098b00d08ea04000060510c083ca7100858a71008eca7100800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#63)[+]
[$qP0000001f00000000080c4e60#f2](+)($QP0000001f00000000080c4e60000000011000000000080c4e60000000020110000000403RUN0000000804idle00000010021f#22)[+]
[$Hg80c4e60#79](+)($OK#9a)[+]
[$g#67](+)($0400000004000000ffffffff604e0c088c171008b8171008ec171008000000005b09060813020000330000003b0000003b0000003b0000003b0000001b000000#a3)[+]
[$qP0000001f00000000080c4b60#ef](+)($QP0000001f00000000080c4b60000000011000000000080c4b60000000020110000000403SLP0000000806outlog000000100203#e0)[+]
[$Hg80c4b60#76](+)($OK#9a)[+]
[$g#67](+)($0000000060800f08ea040000604b0c083c870f0858870f08ec870f0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#84)[+]
[$qP0000001f00000000080c4560#c2](+)($QP0000001f00000000080c4560000000011000000000080c4560000000020110000000403SLP0000000807extintr000000100201#f9)[+]
[$Hg80c4560#49](+)($OK#9a)[+]
[$g#67](+)($0000000006000000ea04000060450c086c660e0888660e08ec670e0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#0c)[+]
[$qP0000001f00000000080c4860#c5](+)($QP0000001f00000000080c4860000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#18)[+]
[$Hg80c4860#4c](+)($OK#9a)[+]
[$g#67](+)($00880d0800000000ea04000060480c0858f60e0858f60e08ecf70e080000000065af040802020000330000003b0000003b0000003b0000003b0000001b000000#80)[+]
[$T080c5760#21](+)($OK#9a)[+]
[$T080c5460#1e](+)($OK#9a)[+]
[$T080c5160#1b](+)($OK#9a)[+]
[$T080c4e60#4e](+)($OK#9a)[+]
[$T080c4b60#4b](+)($OK#9a)[+]
[$T080c4560#1e](+)($OK#9a)[+]
[$T080c4860#21](+)($OK#9a)[+]
[$qL120f0000000080c5760#d3](+)($qM011f0000000080c5760#d3)[+]
[$qP0000001f00000000ffffffff#28](+)($QP0000001f00000000ffffffff000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#7b)[+]
[$Hg-1#0d](+)($OK#9a)[+]
[$g#67](+)($00880d0800000000ea04000060480c0858f60e0858f60e08ecf70e080000000065af040802020000330000003b0000003b0000003b0000003b0000001b000000#80)[+]
[$qP0000001f00000000080c5760#c5](+)($QP0000001f00000000080c5760000000011000000000080c5760000000020110000000403SLP0000000805httpd000000100209#1b)[+]
[$Hg80c5760#4c](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000060570c08fcc5110818c61108ecc7110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#1b)[+]
[$qP0000001f00000000080c5460#c2](+)($QP0000001f00000000080c5460000000011000000000080c5460000000020110000000403SLP0000000807telnetd000000100208#e2)[+]
[$Hg80c5460#49](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000060540c08fc35110818361108ec37110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#88)[+]
[$qP0000001f00000000080c5160#bf](+)($QP0000001f00000000080c5160000000011000000000080c5160000000020110000000403SLP0000000805clock000000100207#f5)[+]
[$Hg80c5160#46](+)($OK#9a)[+]
[$g#67](+)($0000000098b00d08ea04000060510c083ca7100858a71008eca7100800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#63)[+]
[$qP0000001f00000000080c4e60#f2](+)($QP0000001f00000000080c4e60000000011000000000080c4e60000000020110000000403RUN0000000804idle00000010021f#22)[+]
[$Hg80c4e60#79](+)($OK#9a)[+]
[$g#67](+)($0400000004000000ffffffff604e0c088c171008b8171008ec171008000000005b09060813020000330000003b0000003b0000003b0000003b0000001b000000#a3)[+]
[$qP0000001f00000000080c4b60#ef](+)($QP0000001f00000000080c4b60000000011000000000080c4b60000000020110000000403SLP0000000806outlog000000100203#e0)[+]
[$Hg80c4b60#76](+)($OK#9a)[+]
[$g#67](+)($0000000060800f08ea040000604b0c083c870f0858870f08ec870f0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#84)[+]
[$qP0000001f00000000080c4560#c2](+)($QP0000001f00000000080c4560000000011000000000080c4560000000020110000000403SLP0000000807extintr000000100201#f9)[+]
[$Hg80c4560#49](+)($OK#9a)[+]
[$g#67](+)($0000000006000000ea04000060450c086c660e0888660e08ec670e0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#0c)[+]
[$qP0000001f00000000080c4860#c5](+)($QP0000001f00000000080c4860000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#18)[+]
[$Hg80c4860#4c](+)($OK#9a)[+]
[$g#67](+)($00880d0800000000ea04000060480c0858f60e0858f60e08ecf70e080000000065af040802020000330000003b0000003b0000003b0000003b0000001b000000#80)[+]
(この状態で停止)
通信内容をよく見ると,
[$qP0000001f00000000ffffffff#28](+)($QP0000001f00000000ffffffff000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#7b)[+]
[$Hg-1#0d](+)($OK#9a)[+]
という通信が行われていて,スレッドIDが-1でqPコマンドが発行されているんだな. で,その直後にやはりスレッドIDが-1でHgコマンドが発行されている.

Interface誌の今月号(2007/12)を見ると,HgコマンドがスレッドIDを-1で発行する 際には,どうもすべてのスレッドに対して処理を行う,という意味になるらしい. あと remote.c の内部では,Hgコマンドは set_thread() によって発行されるの だけど,

  set_thread (-1, 0);
のようにして,スレッドIDを-1として発行している部分がある. まあ上の場合は第2引数がゼロなので,HgではなくHcコマンドが発行されるのだが, スレッドIDが-1というのはやはり特別な意味を持っているらしく, このへんがあやしい.

...とおもっていろいろ調べたり,スレッドIDが-1の場合のqPコマンドやHgコマンドの 動作をいろいろ変えたりして試してみたのだけど,おかしいまま.うーんへんだ.

どうもqPがスレッドIDを-1で発行されること自体,おかしな気がする. それでもってそれがまた成功してしまっているので, その後に Hg も -1 で発行されてしまっているのではなかろうか?

で,スレッド関連の通信内容をもう一度チェック. とくに,多少複雑なプロトコルになっているqLコマンドとかをよく見直す. そしたら以下のあやしい部分を発見.

[$qL1200000000000000000#50](+)($qM010000000000000000000000000080c4560#99)[+]
[$qL02000000000080c4560#99](+)($qM01000000000080c456000000000080c4860#e6)[+]
[$qL02000000000080c4860#9c](+)($qM01000000000080c486000000000080c4b60#13)[+]
[$qL02000000000080c4b60#c6](+)($qM01000000000080c4b6000000000080c4e60#40)[+]
[$qL02000000000080c4e60#c9](+)($qM01000000000080c4e6000000000080c5160#10)[+]
[$qL02000000000080c5160#96](+)($qM01000000000080c516000000000080c5460#e0)[+]
[$qL02000000000080c5460#99](+)($qM01000000000080c546000000000080c5760#e6)[+]
[$qL02000000000080c5760#9c](+)($qM01100000000080c5760#9d)[+]
最後のqLに対するqMの応答は,もうそれ以上スレッドが無いため, スレッドIDが空となって返っている.しかし応答では qM011... となっており, doneフラグは立っているのだが,スレッド数が1のままなんだな. i386-stub.c のqLコマンド応答部分を見てみると
        case 'q':
          switch (*ptr++)
            {
            case 'L':
              {
                int startflag, doneflag, countmax, count = 1, i;
...
                ptr = remcomOutBuffer;
                *ptr++ = 'q';
                *ptr++ = 'M';
                *ptr++ = hexchars[count >> 4];
                *ptr++ = hexchars[count & 0xf];
                *ptr++ = doneflag ? '1' : '0';
となっており,スレッド数である count が無条件で1になっている.これはまずい.

ということは,qPがスレッドIDを0xffffffff(つまり,-1)で発行されることと, HgがスレッドIDを-1で発行されることの対処を前回入れているが, 実は上記 count がおかしいためにへんなスレッドIDのスレッドが登録されてしまって いるのがそもそもの原因なのではなかろうか? count に対する修正を入れれば, このへんの対処は不要なのではなかろうか.

で,修正したのがこんな感じ.

(2009/04/10 ライセンスに関する文書として,KL-01とLICENSEを追加. 詳しくは第43回を参照)

前回からの差分については diff.txt 参照.

では修正内容について説明しよう.まずqLコマンドの応答部分.

diff -ruN kozos22/i386-stub.c kozos23/i386-stub.c
--- kozos22/i386-stub.c	Sat Nov 24 14:39:50 2007
+++ kozos23/i386-stub.c	Sat Nov 24 17:45:25 2007
@@ -986,7 +986,7 @@
 	    {
 	    case 'L':
 	      {
-		int startflag, doneflag, countmax, count = 1, i;
+		int startflag, doneflag, countmax, count, i;
 		unsigned int threadid[2];
 		kz_thread *thp;
 
@@ -1008,6 +1008,9 @@
 		  }
 		}
 
+		count = 1;
+		if (doneflag) count = 0;
+
 		ptr = remcomOutBuffer;
 		*ptr++ = 'q';
 		*ptr++ = 'M';
スレッド数を,最後のスレッドの場合はゼロにするように修正してある.

さらに,qPコマンドの応答部分.

@@ -1048,16 +1051,8 @@
 		mode = hexToIntN(&ptr, 4);
 		threadid[0] = hexToIntN(&ptr, 4);
 		threadid[1] = hexToIntN(&ptr, 4);
-		if (threadid[1] == 0xffffffff)
-		  {
-		    /*
-		     * 何を返すべきかちょっと不明なので,とりあえず
-		     * カレントスレッドを返す.
-		     */
-		    thp = gen_thread; /* current を返すべきか? 不明... */
-		  } else {
-		    thp = (kz_thread *)threadid[1];
-		  }
+
+		thp = (kz_thread *)threadid[1];
 
 		ptr = remcomOutBuffer;
 		*ptr++ = 'Q';
たぶん今回のqLコマンドのバグ修正により,スレッドIDが0xffffffffでqPが 発行されるようなことは無くなると思うので,その場合の対処を削除. まあこんなへんな処理,残しといてもしょうがないしね.

次に,Hgコマンドの応答部分の修正.

@@ -1125,8 +1120,11 @@
 		if (hexToInt(&ptr, &val))
 		  {
 		    if (rev) val = -val;
+		    if (val == -1)
+		      {
+			break;
+		      }
 		    stub_restore_regs(gen_thread);
-		    if (val == -1) val = (int)current;
 		    gen_thread = (kz_thread *)val;
 		    stub_store_regs(gen_thread);
 		    strcpy (remcomOutBuffer, "OK");
今回の修正で,スレッドIDが-1でHgが発行されることは無くなると思われるのだが, 上のほうで書いたように,Interface誌によれば, スレッドIDが-1でHgコマンドが発行された場合はすべてのスレッドを指す(?) らしい(?)ので,まあ未対応として「$#00」を返すようにする. まあたぶん不要だとは思うのだけど,いちおう入れておく.

では動作させてみよう.いつもどおり実行形式を起動して gdb で接続, continue,Ctrl-C でブレークし,info threads を繰り返し実行する.

(gdb) info threads
  7 Thread 135026496 ( Name: httpd, State: SLP, Priority: 09)  0x0805eeab in sigprocmask ()
  6 Thread 135025728 ( Name: telnetd, State: SLP, Priority: 08)  0x0805eeab in sigprocmask ()
  5 Thread 135024960 ( Name: clock, State: SLP, Priority: 07)  0x0805eeab in sigprocmask ()
  4 Thread 135024192 ( Name: idle, State: RUN, Priority: 1f)  0x0806094f in tcflow ()
  3 Thread 135023424 ( Name: outlog, State: SLP, Priority: 03)  0x0805eeab in sigprocmask ()
  2 Thread 135021888 ( Name: extintr, State: SLP, Priority: 01)  0x0805eeab in sigprocmask ()
* 1 Thread 135022656 ( Name: stubd, State: RUN, Priority: 02)  0x0804af59 in breakpoint () at i386-stub.c:1184
(gdb) info threads
  7 Thread 135026496 ( Name: httpd, State: SLP, Priority: 09)  0x0805eeab in sigprocmask ()
  6 Thread 135025728 ( Name: telnetd, State: SLP, Priority: 08)  0x0805eeab in sigprocmask ()
  5 Thread 135024960 ( Name: clock, State: SLP, Priority: 07)  0x0805eeab in sigprocmask ()
  4 Thread 135024192 ( Name: idle, State: RUN, Priority: 1f)  0x0806094f in tcflow ()
  3 Thread 135023424 ( Name: outlog, State: SLP, Priority: 03)  0x0805eeab in sigprocmask ()
  2 Thread 135021888 ( Name: extintr, State: SLP, Priority: 01)  0x0805eeab in sigprocmask ()
* 1 Thread 135022656 ( Name: stubd, State: RUN, Priority: 02)  0x0804af59 in breakpoint () at i386-stub.c:1184
(gdb) 
おー,スレッドIDが-1のへんなスレッドが無くなっている.問題なさそうだ.

この場合の通信内容は以下.

($T054:58f60e08;5:58f60e08;8:59af0408;thread:080c4840;#7e)[+]
[$M8048088,1:55#c2](+)($OK#9a)[+]
[$T080c4840#1f](+)($OK#9a)[+]
[$qfThreadInfo#bb](+)($#00)[+]
[$qL1200000000000000000#50](+)($qM010000000000000000000000000080c4540#97)[+]
[$qL02000000000080c4540#97](+)($qM01000000000080c454000000000080c4840#e2)[+]
[$qL02000000000080c4840#9a](+)($qM01000000000080c484000000000080c4b40#0f)[+]
[$qL02000000000080c4b40#c4](+)($qM01000000000080c4b4000000000080c4e40#3c)[+]
[$qL02000000000080c4e40#c7](+)($qM01000000000080c4e4000000000080c5140#0c)[+]
[$qL02000000000080c5140#94](+)($qM01000000000080c514000000000080c5440#dc)[+]
[$qL02000000000080c5440#97](+)($qM01000000000080c544000000000080c5740#e2)[+]
[$qL02000000000080c5740#9a](+)($qM00100000000080c5740#9a)[+]
[$qThreadExtraInfo,80c5740#20](+)($#00)[+]
[$qP0000001f00000000080c5740#c3](+)($QP0000001f00000000080c5740000000011000000000080c5740000000020110000000403SLP0000000805httpd000000100209#17)[+]
[$Hg80c5740#4a](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000040570c08fcc5110818c61108ecc7110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#43)[+]
[$qP0000001f00000000080c5440#c0](+)($QP0000001f00000000080c5440000000011000000000080c5440000000020110000000403SLP0000000807telnetd000000100208#de)[+]
[$Hg80c5440#47](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000040540c08fc35110818361108ec37110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#b0)[+]
[$qP0000001f00000000080c5140#bd](+)($QP0000001f00000000080c5140000000011000000000080c5140000000020110000000403SLP0000000805clock000000100207#f1)[+]
[$Hg80c5140#44](+)($OK#9a)[+]
[$g#67](+)($0000000098b00d08ea04000040510c083ca7100858a71008eca7100800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#8b)[+]
[$qP0000001f00000000080c4e40#f0](+)($QP0000001f00000000080c4e40000000011000000000080c4e40000000020110000000403RUN0000000804idle00000010021f#1e)[+]
[$Hg80c4e40#77](+)($OK#9a)[+]
[$g#67](+)($0400000004000000ffffffff404e0c088c171008b8171008ec171008000000004f09060813020000330000003b0000003b0000003b0000003b0000001b000000#a4)[+]
[$qP0000001f00000000080c4b40#ed](+)($QP0000001f00000000080c4b40000000011000000000080c4b40000000020110000000403SLP0000000806outlog000000100203#dc)[+]
[$Hg80c4b40#74](+)($OK#9a)[+]
[$g#67](+)($0000000060800f08ea040000404b0c083c870f0858870f08ec870f0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#ac)[+]
[$qP0000001f00000000080c4540#c0](+)($QP0000001f00000000080c4540000000011000000000080c4540000000020110000000403SLP0000000807extintr000000100201#f5)[+]
[$Hg80c4540#47](+)($OK#9a)[+]
[$g#67](+)($0000000006000000ea04000040450c086c660e0888660e08ec670e0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#34)[+]
[$qP0000001f00000000080c4840#c3](+)($QP0000001f00000000080c4840000000011000000000080c4840000000020110000000403RUN0000000805stubd000000100202#14)[+]
[$Hg80c4840#4a](+)($OK#9a)[+]
[$g#67](+)($00880d0800000000ea04000040480c0858f60e0858f60e08ecf70e080000000059af040802020000330000003b0000003b0000003b0000003b0000001b000000#81)[+]
[$T080c5740#1f](+)($OK#9a)[+]
[$T080c5440#1c](+)($OK#9a)[+]
[$T080c5140#19](+)($OK#9a)[+]
[$T080c4e40#4c](+)($OK#9a)[+]
[$T080c4b40#49](+)($OK#9a)[+]
[$T080c4540#1c](+)($OK#9a)[+]
[$T080c4840#1f](+)($OK#9a)[+]
[$qL12000000000080c5740#9b](+)($qM00100000000080c5740#9a)[+]
[$qP0000001f00000000080c5740#c3](+)($QP0000001f00000000080c5740000000011000000000080c5740000000020110000000403SLP0000000805httpd000000100209#17)[+]
[$Hg80c5740#4a](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000040570c08fcc5110818c61108ecc7110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#43)[+]
[$qP0000001f00000000080c5440#c0](+)($QP0000001f00000000080c5440000000011000000000080c5440000000020110000000403SLP0000000807telnetd000000100208#de)[+]
[$Hg80c5440#47](+)($OK#9a)[+]
[$g#67](+)($0000000000000000ea04000040540c08fc35110818361108ec37110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#b0)[+]
[$qP0000001f00000000080c5140#bd](+)($QP0000001f00000000080c5140000000011000000000080c5140000000020110000000403SLP0000000805clock000000100207#f1)[+]
[$Hg80c5140#44](+)($OK#9a)[+]
[$g#67](+)($0000000098b00d08ea04000040510c083ca7100858a71008eca7100800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#8b)[+]
[$qP0000001f00000000080c4e40#f0](+)($QP0000001f00000000080c4e40000000011000000000080c4e40000000020110000000403RUN0000000804idle00000010021f#1e)[+]
[$Hg80c4e40#77](+)($OK#9a)[+]
[$g#67](+)($0400000004000000ffffffff404e0c088c171008b8171008ec171008000000004f09060813020000330000003b0000003b0000003b0000003b0000001b000000#a4)[+]
[$qP0000001f00000000080c4b40#ed](+)($QP0000001f00000000080c4b40000000011000000000080c4b40000000020110000000403SLP0000000806outlog000000100203#dc)[+]
[$Hg80c4b40#74](+)($OK#9a)[+]
[$g#67](+)($0000000060800f08ea040000404b0c083c870f0858870f08ec870f0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#ac)[+]
[$qP0000001f00000000080c4540#c0](+)($QP0000001f00000000080c4540000000011000000000080c4540000000020110000000403SLP0000000807extintr000000100201#f5)[+]
[$Hg80c4540#47](+)($OK#9a)[+]
[$g#67](+)($0000000006000000ea04000040450c086c660e0888660e08ec670e0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#34)[+]
[$qP0000001f00000000080c4840#c3](+)($QP0000001f00000000080c4840000000011000000000080c4840000000020110000000403RUN0000000805stubd000000100202#14)[+]
[$Hg80c4840#4a](+)($OK#9a)[+]
[$g#67](+)($00880d0800000000ea04000040480c0858f60e0858f60e08ecf70e080000000059af040802020000330000003b0000003b0000003b0000003b0000001b000000#81)[+]
(この状態で停止)
qLコマンドの最後が
[$qL02000000000080c5740#9a](+)($qM00100000000080c5740#9a)[+]
となっていて,スレッド数がゼロ,doneフラグが立ったものが返っている. あとよく見るとわかるのだけど,前回まではあった「Hg-1」が今度は無くなっている. またスレッドIDを0xffffffff で qP コマンドが発行されることも無くなっている. うん,問題無しだ.
メールは kozos(アットマーク)kozos.jp まで