2005-08-28-01-Turn Off & Lock でDB破壊 -【解決】 - project-enigma

2005-08-28-01-Turn Off & Lock でDB破壊 -【解決】

>> Site top >> weblog >> 月別アーカイブ >> 2005年08月のlog >> 2005-08-28-01-Turn Off & Lock でDB破壊 -【解決】

最終更新日付:2014/01/10 08:19:56


Turn Off & Lock でDB破壊 -【解決】

2005 年 08 月 28 日

ソースコードを眺めて考える振りをした後、適当に理由をでっち上げて修正したら直ってしまった...わけがないじゃないか。ソースをイジるときはそれなりの根拠があってやるわけですよ。えぇ、直しましたとも。

自分は CodeWarrior9 + POL で開発をしているのでほとんどの人にはよくわからない話かもしれないが、CPalmApp::ExitInstance( ) はアプリの終了時に呼び出される。これは appStopEvent の基本的なハンドラにあたるもので、データベース内のデータをヒープ上にコピーして使いまわしている自分のアプリでは、このハンドラ(当然 CPalmApp 派生クラスでオーバーライド)でヒープ上のデータをデータベースに書き戻している。で、そのタイミングを疑ったわけだ。ひょっとして、appStopEvent の発生からこのハンドラに到達するまでの間に、Turn Off & Lock に関連する何かがメモリを破壊しているのでは?と。

そこで様子を窺うため、事象が再現しない Palm OS Simulator 上で appStopEvent を引っ掛ける。どうせ画面タップやハードボタンのトラップのために CPalmApp::PreSystemEventHook( ) はオーバーライドして使っている。そこを appStopEvent が通過したときにブレークするようにして...と。後は ExitInstance() に至るまでを様子見...うんうん、行けそうだ。というわけでデータベースへデータを書き戻す処理を PreSystemEventHook( ) 内に移動し、appStopEvent 発生時に実行するように修正。これなら appStopEvent 発生時に余計なことをされる前にデータベースへの保存を実行できる。で、実機で試す...と、OK です!

しかしだ、アプリが正常に終了するまでヒープの内容が保障されない OS ってのはいかがなもんだろう? しかし、ひょっとしたら悪さをしているのは POL かもしれないし、Palm OS Simulator で再現しなかったことを考えると Turn Off & Lock に関する実装側の問題なのかもしれない。結局自分のとった対処は回避策でしかないのだ。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.