人気ブログランキング | 話題のタグを見る

[COCOA] 新型コロナウイルス接触確認アプリのXamarinバグについて [コロナ] (2/19)

COCOAのiphoneアプリの初期化リセットについての下記のTogetter- Twitterまとめを見ていたのだが、


え~っと、その~、あの~、
DeleteとMoveの間でプログラムをブレイクポイントを置いて止めたあとにOSでterminateって、OSがファイルDelete処理中にプロセス終了させるってことだけど、そんなことしていいのかこんな処理で?
いやまずはこの前に.tmpというファイル名でコピー取ってるんだよな?
それをやること自体はいいんだ。そのファイルが壊れてないかチェックしないで、元のファイル名にMoveしてるけど大丈夫か?

あとに別の方が指摘しているように、OSがファイル処理中に何らかの原因でそのプロセスを終了させることを考えて、ワークファイルをTempに作成してそこにファイルのバックアップコピーを作成して、バックアップが正常に終了したことを確認してから、元ファイルを消してまたそれが正常に終了したことを確認してから、別の内容のファイルを元のファイル名にMoveするのが、普通の技術者のする事なんじゃないのかな?

またこのファイル操作関数2つとも危ないから、1関数毎に丁寧にエラー処理すべき。

仕事ではUnixで自分もCのCreat関数を使ってセマフォのように排他的ファイルのような処理(プロセス終了されても必ずCreat関数が使ったファイルはOSでロックされて残る)をしてから、データファイルの書き換えをやってた。

だから、そういうのを考慮して安全サイドに倒れるような設計を普段していないと、そんなものはOSがやって当たり前なんて考えてしまう。

だから、それはXamarinの不具合でも基礎的欠陥でも何でもない。そういうOSのプロセス終了にも配慮した設計方法を取るのが当たり前。

それはiOSだろうが、Windowsだろうが、変わらない。

本家にISSUEしたって受け付けられないだろう~

それはあなたのAPIの技術的な使い方が間違っているからと言われてしまう。

Xamarinを使ったって、ネイティブ使ったって、そういう異常時というかどんな可能性をも慎重に考慮するようにしないと結局は何を使ってもバグの元だ。

いやファイル処理なんてCPUから比べたら莫大な時間が掛かるのに、その間にプロセス終了する可能性を考慮するなんて基本中の基本だ。


by k1segawa | 2021-02-19 01:46 | Android, スマホ, タブレット | Comments(0)