<< NEXT Main BACK >>
TweetTitle

TwitterでiTunesの再生曲をつぶやく自作スクリプトにバグ?発見。
現象としては、iTunesを終了させても勝手に再起動してしまうというもの。
結構前から発生してたけど、頻度も低いのであまり調査もしてなくて。
故意に起こせるものでもなかったというのと、iTunesと連携してるアプリが
他にも複数あるから、切り分けもめんどくさかったりして。

iTunesのバージョンアップの影響かなんなのか、発生頻度が最近高くなり。
いくつかログ埋め込んで調べたら意外とあっさり原因判明。

JScriptではCOMオブジェクトの明示的な破棄ができない?みたいだったので
iTunesの終了イベントを受けたら再起動し、前回と同じプロセスIDの
iTunesに対しては再接続しないようにWMI使ってプロセスを監視してたんだが
これがどうも不完全だった模様。
実装自体の問題というより、iTunesの動きが予想外だった。

起動したiTunesがすぐに終了して別プロセスで立ち上がり直すケースがあり
プロセス監視で最初に見つけたものと実際に常駐するものが異なることが。

この動きによって、スクリプト側が接続していると思ってるプロセスと
実際に動いているiTunesのプロセスIDにずれが生じる。
んで、iTunes終了のイベント受けてスクリプト再起動したあと、
プロセス検索したときに終了しかかっているiTunesを検出。
いままでつないでいたものと違うと認識して再び接続に行く。
そうなると、終了しかかりのiTunesはそのまま終了し、
新しくiTunesが起き上がってきてしまう模様。
なので、一度発生するとそれ以降はずっと問題が起き続ける。

終了直前に動作中のiTunesのプロセスIDを取得し直すことで対処。
未接続時に行っている検索処理の流用なので組み込むのは簡単。
なぜこのような動きになってしまうのかは特定できてないが。

と、整理しながらいろいろ書いててふと思った。
プロセス検出してすぐにCOMの接続してるせいだったりしないだろうか?
起動したiTunesがまだ接続受けられない状態でCOMオブジェクト生成すると
それを契機にiTunesが起動してしまい、前に起動しかかっていたほうが
終了されるとか???そんな可能性もありそうな気がしてきたな。。。
だとしても、いつになったらつなぎに行っても大丈夫、というのは
判断できないだろうし、そうすると時間で制御せざるを得ないだろうから
あまりいい実装にはできなさそうだ。

日記 : 00:34 : comments (0)trackback (0)
コメント
コメントする








この記事のトラックバックURL :
トラックバック
RECOMMEND

YUMIKO
J.e.t.
fripSide
vin-PRAD
the music Laboratory cube

プラスチックガール
福田舞
strawberry record
sjue
コトノハクロニクル
サイファイ
谷口深雪
木下直子
川崎萌
食い逃げリーダー
es
Frisbee


プレイログ

CALENDAR
S M T W T F S
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
<<  2024 - 05  >>
NEW ENTRIES
CATEGORYS
COMMENTS
  • Roundabout Bandwagon@下北沢mona records
  • あるる (01/07)
  • hidemi (01/06)
  • Roundabout Bandwagon@大久保HOTSHOT
  • あるる (08/20)
  • hidemi (08/20)
  • hidemi@新宿PAPERA
  • あるる (07/20)
ARCHIVES
PROFILE
OTHERS
POWERED BY
POWERED BY
ぶろぐん
DESIGN BY
ゲットネット
LOGIN
USER ID:
PASS:
Mode: ゲストモード
SEARCH BOX