![]() |
私は「なんちゃってプログラマ」で、Perlでちょっと変態的なコーディングができます。それがこの一月ほどmacOSのアップデートに絡んだ不具合でトラブってました。
ヘッドレスでLAMPもどきのサーバを稼働していたのですが、macOSを最新にしたらCGI(Perlスクリプト)が動かなくなるは、中途半端にダウングレードしたらhttpdの接続が不安定になるはで、環境構築に時間を取られました。挙げ句の果てにMac自体が起動しなくなりました。かなりの確率でお釈迦になったようです。使わないPCをもらってSlackware入れて代替サーバを立て、なんとか動くようになりました。私的なWebアプリケーションなんですが、開発品のラベル作るのに使われていて、迷惑かけました。
「Perlはインタプリタだからコアを吐くことは無い」はウソというのは知っています(今はJITコンパイラみたいな感じ)。しかし、文法的チェックでエラーがなく、且つ、前の環境で問題なく動いていたものが、コアを吐いて死ぬという訳分からん原因を突き止めるのにものすごく時間がかかりました。OSと共にperlもアップデートされていて、メモリ管理辺りの挙動が変わったのだと推測します。
手抜きをするためにオブジェクト指向プログラミングぽいプログラムを書くのですが、機能の拡張はis-aとhas-aの両方が使えます。Perlの場合、is-aは(おまじないのあと)追加する関数を定義するだけ、has-aの方はオブジェクトを生成してその機能を呼び出す関数を定義する必要があります。今回の問題は後者に絡んでいるようです。
全ての関数を定義するのは面倒なのですが、そこはPerl。AUTOLOADという便利な機能が用意されています。これを使うと、未定義の関数が呼ばれた時に持っているオブジェクトを適宜呼び出すといったことが可能になります(動的に生成した文字列で呼び出すべき関数を指定できたりします)。これが悪さして、新しいバージョンではインスタンスの二重解放が実行されたのではと、推測します。
わかった時にはMacがお釈迦。腑開してハードディスクを強制初期化出来れば簡単なのですが、SSDがオンボードで外せないことがわかり、どうやって復活させたものかと途方に暮れています。苦難はまた続く。
コメントを編集
いいねした人
コメントを書く
ヤマレコにユーザー登録いただき、ログインしていただくことによって、コメントが書けるようになります。ヤマレコにユーザ登録する