ももらぼっ!にっき


2009年02月14日 [長年日記]

_ [TTBase] Init/Unload中のExecuteCommandの呼び出し。

昨日想定した通り、やっぱりInit/Unload中にExecuteCommandを実行すると以下の問題が発生してしまいました。

  • TTBEvent_Init中に常駐型プラグインのコマンドをTTBPlugin_ExecuteCommand APIで実行しようとすると、プラグインのロード順によってはコマンドが実行されないことがある。
  • TTBEvent_Unload中に常駐型プラグインのコマンドをTTBPlugin_ExecuteCommand APIで実行しようとすると、エラーが発生する場合がある。

どちらも、プラグインリストが不完全な状態でTTBPlugin_ExecuteCommand APIを呼び出すことで、発生していました。 なので、プラグインリストを完成させてから各プラグインのTTBEvent_Initを呼び出すように、先に各プラグインのTTBEvent_Unloadを呼び出してからプラグインを解放するように修正することで対処しました。

TTBEvent_Unload内ですでにアンロード済みの常駐型プラグインのコマンドを実行しようとすると、もう一度TTBEvent_Initされてプラグインがロードされてしまいますが、最終的にもう一度アンロードを試みるので、基本的にはリソース等がリークすることはないはずです。 ただ、昨日も書いた通り、プラグイン間のコマンドの呼び出しが循環してしまっている場合(プラグインAがプラグインBのコマンドを実行し、プラグインBがプラグインAのコマンドを実行し…という場合)はどうしようもないです。 これは本体側ではなんとも対処しようがなさそうなので、そのまま放置しておくことにしちゃいます。 実際問題、そんなコマンド間の呼び出しが起こってしまうことはなさそうですので。

なんにせよ、これで指摘された部分で本質的にまずそうなところは対処できたのでbeta2としてリリースをしようと思います。 とりあえず、ソースはCVSにコミット済みです。 …ってゆーか、そろそろexeのバージョン管理がビルド番号Onlyなのが辛くなってきたのでいい加減1.1.0としてリリースしてしまって、以降のバグ改修はリビジョン番号をあげることで対処していきたいところですが、そうもいかないだろうな…。