HmGrepSub.dllを使用したgrepの不具合につNo.34695
さゆまこ さん 16/01/07 23:39
 
V8.54にてHmGrepSub.dllが有効になっている状態でネットワーク上の共有フォルダで
grepしますとファイル読み込みエラーの警告ダイアログが出ることがございました。

警告ダイアログの詳細は以下の通りでした。

filename - ファイルの読み込み(ReadFile)に失敗しました。エラーコード = 64

再試行では何度繰り返しても同じエラーになりました。


秀丸メニューの動作環境-トラブル対策にあります「grepの処理を従来通りにする」
にチェックを入れて動作確認しましたところ、こちらの設定ではエラーは発生致しま
せんでした。

また全ての共有フォルダで同様のエラーが発生する訳ではなくてエラーが出ない共有
フォルダもございました。

現状ではHmGrepSub.dllを無効にすることで使用に問題はございませんが、念のため
不具合としてご報告させて頂きました。

よろしくお願い致します。

[ ]
RE:34695 HmGrepSub.dllを使用したgrepのNo.34696
秀まるお2 さん 16/01/08 11:32
 
 HmGrepSub.dllを担当してる斉藤秀夫です。

 HmGrepSub.dllを使うとエラーが出るけども、従来の方式にするとエラーが出
ないということで調べてみたら・・・

 まず、従来方式でエラーが出ないのは、実はエラーは起きてはいるけども、エ
ラーメッセージを表示してないだけって可能性が高いように思います。というの
は、秀丸エディタでの従来方式を調べてみたら、ファイルの読み込み(具体的に
ReadFileっていうWindowsのAPI呼び出し)でエラーが返ったとしても、特にエ
ラーメッセージを表示する処理はしてなくて、単純にそのファイルをスキップす
るだけになってたからです。

 HmGrepSub.dllを使う方式の方は、この方式にしたことでいろいろバグが出て
しまってはいけないという意味もあってエラーチェックを厳密になるようにして
まして、ReadFileでエラーになってもちゃんとエラーメッセージを表示して再試
行できるようにしてました。

 もし、従来方式でも同じエラーが起きてるとしたら、だふん、問題のファイル
にヒットするはずのgrepをしてもうまくヒットしてないんじゃないかと思います。
ただ、エラーが出てるのがファイルの途中からだとしたら、そのエラーの出る前
の部分(ファイルの先頭とか)はヒットするかもしれませんので、たとえば
ファイルの末尾にあるはずの文字列で検索してもらうとはっきりするかと思いま
す。


 もしも従来方式でちゃんとヒットしてる(エラーが起きてない)としたら、
HmGrepSub.dllにて複数のファイルを並行して読み込むようになったがために、
何かネットワーク関係のドライバーかファイルサーバー側に問題が起きて、それ
でエラーが起きてるのかもしれません。もしそうだとしたら、並行して読み込む
こと自体が出来ないってことになりまして、だとすると、せっかくHmGrepSub.
dllを使う意味が無くなってしまいます。この場合はすみませんが従来方式で使
っていただくしか無いように思います。

 こちらで何か対策するとしたら、、64番のエラーが出たら従来方式に戻してい
ただくように、エラーメッセージの中に補足説明を付けるとかって対策なら可能
かなぁと思います。

------------------------------------------------------------------
 そもそも的に、エラーコード64のエラーが発生する理由ですが・・・

 64番のエラーは、

//
// MessageId: ERROR_NETNAME_DELETED
//
// MessageText:
//
//  The specified network name is no longer available.
//
#define ERROR_NETNAME_DELETED            64L

 のように定義されてます。googleで「ERROR_NETNAME_DELETED ReadFile」で検
索してみたのですが、いまいち解決事例は出てこないようで、ちょっと分かりま
せんでした。

 特定のフォルダ配下に限って起きるのであれば、何かそのフォルダの共有の設
定とかの関係があるのかもしれません。例えばそこのフォルダ配下にアクセスす
る時の同時アクセス数の制限みたいなのがあったとしたら、複数同時に読み込も
うとしてエラーになるのはありえそうな気がします。

 HmGrepSub.dllでは、CPUのスレッド数が多いとそれだけ複数同時にファイルア
クセスするようになります。最高4スレッドまで並行して動作します。

 Core i3だと2スレッド、Corei5/i7だと4スレッド並行動作になると思います。

[ ]
RE:34696 HmGrepSub.dllを使用したgrepのNo.34697
さゆまこ さん 16/01/08 14:49
 
ご返答頂き、ありがとうございました。

従来方式でのgrepを使用した際にエラーでファイルがスキップされているかどうかを
検証致しました。
検証方法としましてどのファイルにも含まれているような単語でgrepするというテス
トを20回ほど繰り返しましたが「見つかった数」はすべて同じ数値になりました。
試行回数が不足している可能性もございますが動作と致しましてはエラーが発生して
いないか、もしくはエラーが発生していても何らかの形でエラー復旧処理がされてい
ると思われます。

HmGrepSub.dllを使用したgrepでエラーが出るケースですが特定のファイルという訳
ではなくてgrepするごとに異なるファイルでエラーが発生致します。


ネットで情報を検索しましたところ、Macの共有フォルダへのアクセスでトラブルが
発生する事例を見つけることができました。
grepでエラーが出ます共有フォルダはMac上のものとなっており、この事が原因なの
ではないかと思われます。

参考のために私の環境をお伝え致します。

共有フォルダ検索でエラーが発生するPC
Mac OSX 10.11.2

秀丸を使用しているPC
WindowsXP Professional SP3
CPU Intel Core i5-2500K



今回、ご報告させて頂きました件に関しましてはネットなどで同様の事例を見つける
ことが出来ませんでした。
稀なケースに該当すると思われますのであえて対処して頂く必要はないと考えており
ます。

ただ、HmGrepSub.dllを使用したgrepの速さはかなり魅力的ですのでトラブル対策の
項目としてネットワーク上のgrepは従来通りにする、のようなものがありますと選択
の幅が広がるかと思います。
同様の事例が報告されることがございましたらご検討頂ければ幸いです。

お忙しい中、ご対応頂きありがとうございました。

[ ]
RE:34697 HmGrepSub.dllを使用したgrepのNo.34698
秀丸担当 さん 16/01/08 16:06
 

HmGrepSub.dllを使うときにうまくいかないということで、複数のスレッドで同
時にファイルアクセスしていることが、Macとの間で何か問題になっている可能
性がありそうです。

HmGrepSub.dllを使わないオプションで既に解決されたとのことですが、その場
合高速な効果は得られないです。
HmGrepSub.dllを使いつつ、スレッド数を明示的に指定するオプションを追加し
て、高速の効果があるまま問題を回避できる可能性が高いと思います。
例えばスレッド数を1個にすると、回避しつつ効果が得られることになると思い
ます。

動作環境のgrepのところか、トラブル対策のところのいずれかに、スレッド数を
指定できるようなオプションの追加を、今後のバージョンでしたいと思います。

[ ]
RE:34698 HmGrepSub.dllを使用したgrepのNo.34699
さゆまこ さん 16/01/08 17:10
 
ご返信頂きありがとうございます。

>動作環境のgrepのところか、トラブル対策のところのいずれかに、スレッド数を
>指定できるようなオプションの追加を、今後のバージョンでしたいと思います。

お手数をお掛けしてしまうことになり、大変恐縮です。
実装されました際は動作確認をさせていただきたいと考えております。

よろしくお願い致します。

[ ]