発行番号: Cente101-0126
Rev: 第1版
発行日: 2026/01/05
【題名】
同一ドライブで異なるセマフォIDを使用してしまう問題について
【適用製品】
Cente FileSystem Ver5.62 ~ Ver6.51
【影響API】
fopen, fclose, fflush, fputc, fputs, fwrite, ct_divide, ct_ins_clust, chg_filelen, ct_combine, rename, remove, chk_dsk, finfo, chg_attr, chg_tstamp,mkdir, rmdir, move, rmdir_all, dinfo, readdir_wc, chg_attrfp, chg_tstampfp, opendir, readdir, fseek, get_attr, get_tstamp, q_format, renew_fsinfo
fopen_uni, ct_divide_uni, ct_ins_clust_uni, ct_combine_uni, rename_uni, remove_uni, chk_dsk_uni, finfo_uni, chg_attr_uni, chg_tstamp_uni, mkdir_uni, rmdir_uni, move_uni, rmdir_all_uni, dinfo_uni, readdir_wc_uni, opendir_uni, readdir_uniget_attr_uni, get_tstamp_uni, q_format_uni, renew_fsinfo_uni
【現象】
他のタスクとセマフォ獲得処理がぶつかった場合に、
同一ドライブで異なるセマフォIDを使用してしまうことにより、
ディレクトリエントリ情報、FAT情報、メタデータ情報が壊れる可能性があります。
《発生条件について》
以下の条件を全て満たした場合に発生します。
①OSを使用(複数タスク使用時)
②DRIVE_MAX_NUMまたはFS_JNL_DV_MAXが2以上
③fs_lock.cを提供されているコードのまま使用
④上記の影響APIを使用
【原因】
fs_direntry_lock()、fs_fat_lock()、fs_journal_lock()はファイルアクセス時などで行うセマフォロック関数になります。
Centeの設計では、各ドライブごとにディレクトリエントリ用のセマフォを持ち、排他制御を行います。
本来は、ディレクトリエントリ、FAT、メタデータにアクセスする際に、そのドライブ専用のセマフォのみを使用してロックする必要がありますが、
特定のタイミングでディスパッチが発生すると、1つのドライブで複数のセマフォを同時に使用してしまう場合がありました。
その結果、ディレクトリエントリ情報、FAT情報、メタデータ情報が破壊される可能性があります。
【回避方法】
複数タスクから影響APIを同時に実行しない。
■プログラムによる回避方法
修正ソースにつきましては、弊社サポートまでお問い合わせ下さい。