start

ZFSでチェックサムエラー発生!

zpool statusしてみたらチェックサムエラーが発生していた。

  pool: zroot
 state: ONLINE
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scan: none requested
config:

	NAME            STATE     READ WRITE CKSUM
	zroot           ONLINE       0     0     1
	  mirror-0      ONLINE       0     0     2
	    gpt/boot0a  ONLINE       0     0     2
	    gpt/boot0b  ONLINE       0     0     2

errors: 3 data errors, use '-v' for a list

zpool scrub掛けて待つ事40分。改めてzpool status。

  pool: zroot
 state: ONLINE
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scan: scrub repaired 0 in 0h38m with 24 errors on Fri Oct  7 23:44:36 2011
config:

	NAME            STATE     READ WRITE CKSUM
	zroot           ONLINE       0     0    25
	  mirror-0      ONLINE       0     0    50
	    gpt/boot0a  ONLINE       0     0    50
	    gpt/boot0b  ONLINE       0     0    50

errors: 24 data errors, use '-v' for a list

ちょwwwwwwおまwwwwwwwエラー増えとるwwwwww

何かの間違いに違いない、と淡い期待を抱きつつ再びscrub&status。

  pool: zroot
 state: ONLINE
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scan: scrub repaired 0 in 0h38m with 24 errors on Sat Oct  8 00:25:46 2011
config:

	NAME            STATE     READ WRITE CKSUM
	zroot           ONLINE       0     0    49
	  mirror-0      ONLINE       0     0    98
	    gpt/boot0a  ONLINE       0     0    98
	    gpt/boot0b  ONLINE       0     0    98

errors: 24 data errors, use '-v' for a list

更に増えとるorz

しかも「修復出来なかったファイルリスト」みたいなのが続けて表示されてるorz

これはどうしたものか・・・。

MinGW+OpenGL+GLUTで毎回ハマること

$ gcc -lfreeglut -lglu32 -lopengl32 main.c
main.o:main.c:(.text+0x1c): undefined reference to `_imp____glutInitWithExit@12'
main.o:main.c:(.text+0x3e): undefined reference to `_imp____glutCreateWindowWithExit@8'
main.o:main.c:(.text+0x60): undefined reference to `_imp____glutCreateMenuWithExit@8'
main.o:main.c:(.text+0xa0): undefined reference to `_imp__glutInitDisplayMode@4'
main.o:main.c:(.text+0xb9): undefined reference to `_imp__glutInitWindowSize@8'
main.o:main.c:(.text+0xd2): undefined reference to `_imp__glutInitWindowPosition@8'
main.o:main.c:(.text+0xf8): undefined reference to `_imp__glutDisplayFunc@4'
main.o:main.c:(.text+0x109): undefined reference to `_imp__glutReshapeFunc@4'
main.o:main.c:(.text+0x113): undefined reference to `_imp__glutMainLoop@0'
main.o:main.c:(.text+0x13e): undefined reference to `glClear@4'
(以下略)

大量のリンクエラーが出て(・3・)あるぇ~?となる。

解決方法・・・というか正しくは↓のように、コンパイル対象のソースを-lオプションより前に持ってくるである。

$ gcc main.c -lfreeglut -lglu32 -lopengl32

どういうわけか、この罠だけは毎度ハマっては、ライブラリを入れ替えてみたり小手先のマクロを定義してみたりして時間を無駄にしてしまうorz

ExtAudioFileは重くなかった

前のエントリで発生していた音飛び問題が解決。

原因はインタリーブのデータを非インタリーブに変換する処理が間に合ってなかった模様。

この処理はNSFの再生でも行われてるし、その程度で処理落ちするか?って気もするが、全てインタリーブで処理するようにしたら奇麗サッパリ解決した。

疑ってごめんね、ExtAudioFileたん。

ExtAudioFileは重い?

本腰を入れてMac用のオーディオプレーヤーを作成中。足掛け3年位作り続けてるけど、今回は本気。もりもり機能実装中・・・と行きたいところだが、ExtAduioFileを使った各種オーディオファイルの再生で、たまにノイズが出るバグが取れなくて苦悩中。

Core Audioのレンダーコールバックで要求してくるサンプル数を多めにとってみたが、若干の改善が見られるも解決には至らず。それならばと、デコード部分を別スレッド化して非同期でバックバッファを埋めるようにしても、これまた有意な改善は見られず。バッファのロックが足かせになってるかも?と思い、急ごしらえでバッファ2枚を使ったスワップ式にしてみても駄目駄目。

開発機は4年前のMacBook Proだけど仮にもCore 2 Duo 2.4GHzのマシンだから、例えデバッグビルドだとしても、たかがAAC程度のデコードで処理落ちするとは考えられない。そもそも、ExtAudioFile自体は最適化の有無の影響は受けないだろうし、処理中もまだまだCPUの余裕はある。

NSF(NES Sound Format:ファミコンのサウンド形式)の再生は問題なく出来てるから、ネックになってるのはExtAudioFileとしか考えられないんだよなぁ…。

むーん・・・分からん。

次はCore Audioに渡すフォーマットを32bit Floatの正準フォーマットにしてみるとしよう。

シングルトン()笑

会社でこんなソースを見かけた。

class Hoge
{
public:
    static Hoge *Instance;
    static Hoge *getInstance() { return Instance; }
 
    Hoge() {
        Instance = this;
    };
 
    void initialize() {
        if (Instance == 0) Instance = new Hoge;
    }
    (略)
};
 
// シングルトン
static Hoge hogeInstance;
 
void doSomething()
{
    hogeInstance::Instance->func();
}

見かけたというか、同じ仕組みのクラスがあっちこっちに散らばってた。念のために言っておく、コードはこれで間違いない。何度も見直したからね。

色々と突っ込みどころはあるけど、まず、シングルトンを想定してるのにコンストラクタをpublicで書いちゃう男の人って……。せめて多重生成検知のassertくらい入れようず。

いやいやいや、グループ会社内で(自称)一番技術力が高いと公言してるところの、仮にも俺より高給取りで優秀なプログラマが書いたコードだ。きっと俺なんぞには考えもつかない、深遠なる理由があるに違いない。

でも、色々と考えてみたけど、やっぱり何がしたいのか解らなかった。しかし、メンバ変数を触らないメンバ関数は、クラスの実体が無くても正常に呼べるって事は解った(実験済み)。つまり、上のクラスのinitialize()は期待通りの動作をする。これがC++の仕様の範疇かどうかは知らない。

静的メンバ関数がヌルポで呼び出せる(static_cast<Hoge*>(0)→staticFunc();)のは知ってたけど、メンバ関数も大丈夫だとはねぇ…。よーく考えてみれば、確かにメンバ関数はそのクラスで共用だから、関数の実体は静的に存在してるだろうから呼べてもおかしくないはない。でもやっぱり気持ち悪い。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo