先日書いたように、JACKのパッチベイアプリ、Catiaの動きがどうも怪しい(勝手にPulseAudioを直結する)ので、代わりにPatchageを動くようにした。

Patchageの問題は、起動するとすぐに下記のエラーで強制終了してしまうことだ。

BDB2034 unable to allocate memory for mutex; resize mutex region
cannot open DB environment: Cannot allocate memory
Segmentation fault

メモリ不足と出ているので、設定で直らないかと思って調べたのだが、関係するものは見つからなかった。それで、このエラーがどこから出るか調べたのだが、実は2箇所に分かれており、最初の2行と最後の行は別の要因で出ているようだ。ただ、最初の問題があるために2番目の問題が出ている可能性もある。

まず、最初の問題(BDB2034)は、JACKのライブラリ(libjack)の関数jack_client_open()で起こっていることが分かったが、原因は分からない。検索すると、このエラーは他のプログラムでも出るのだが、明確な解決策はないようだ。また、他のJACKクライアント(例: jack_lsp)でも出るが、問題なく動作しているので、致命的な問題ではなさそうだ。近頃Linuxのカーネルを更新したので、それに関係しているのかも知れない。それで、ひとまずこの問題には対処しないことにした。

次に、2番目の問題(Segmentation fault)もJACKライブラリの関数jack_get_property()の中で起こっていることが分かった。jack_get_propertyの使い方は正しいようなので、JACKライブラリ自体の問題か、関数の仕様が変わったのかも知れない。あと、記憶ではしばらく動いていたので、何度も試行錯誤するうちにシステム(OS?)の状態がおかしくなっているのかも知れない(そうであれば、再起動すれば直るだろう)。あるいは、上に書いたようにLinuxのカーネルを更新した影響かも知れない。幸い、この関数は1回しか使われておらず、しかも、その処理をスキップしても大きな問題がないので、そうすることにして無事動くようになった

ただ、前にも書いたように、使い勝手の問題があったので、それも何とかした。一番大きな問題は、ウインドウ内のJACKクライアント(モジュール)の表示位置が保存されない(再起動すると位置がおかしくなる)というものだ。ただ、Patchageのウインドウを見ると、全部のクライアントの位置が保存されない訳ではなく、入力または出力だけのものが駄目(入出力があるものの位置は保存される)なことが分かったので、その部分(Configuration.cpp: Configuration::save())を修正した。

それから色を調整して(プログラムの変更は不要)、最終的には大分いい感じになった。これなら、充分にCatiaの代わりになりそうだ。

思ったより簡単にできて気分がいいが、前にも書いたように、やっぱりJACKは枯れていないことを実感した。あと、この修正を作者に知らせるのはいいと思うのだが、今まで(別のプログラムで)何度も無視されて来たので、躊躇している。

(15:32) 気分が良かったのも束の間で、Patchageを使っていても変な接続が起こってしまった。結局、システム(JACK、PulseAudio、OSのいずれかまたは全部)がおかしくなっていたようなので、再起動したら、すべての問題が起こらなくなった(Catiaでの勝手な接続も、Patchageがエラー(BDB2034やSegmentation fault)で起動しないのも起こらなくなった)。とりあえず直ったのはいいが、原因不明なのでまた起こる気がする。

そして、Patchageのクライアント位置の保存の修正は有用だが、Catiaに問題がなかったので、わざわざ使う理由がなくなってしまった。まったく何とも言えない・・・

 

補足: プログラマーは、プログラムを修正することや修正のためのモジュールを「パッチ」と言います。単純なバグ修正の場合も多いですが、(何だか良く分からない問題などで)根本を直さずに対症療法的に修正することをそう呼ぶことも多いです。Windowsで山ほどあるもの(KB*)ですw

  •   0
  •   0

コメントを書く

名前    

メール 

URL