スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« Ubuntu版も完成 | トップページ | Mirror-DTC for Ubuntu 1.3.0.1を公開 »

Ubuntu版も順延

昨日書いた様に、Ubuntu版Mirror-DTC Ver1.3.0.1も完成していたのだが、リリース前の確認を行っていると問題が見つかった。なので、リリースは、多分、明日に順延する。既に、問題は解決したのだが、このバイナリでの動作確認も、再度、行う必要があるからだ。

見つかった問題というのは、以下の3個だ。

1.スクリーンキーボードからの入力が2文字ずつになる。

2.キーバインド登録ダイアログのクローズ時にクラッシュする

3.比較的大きな文字列をクリップボードで転送するとクライアントがクラッシュする

1.については、Ubuntu16.04LTSでしか発生しないし、その原因も明らかに変なので、Ubuntu16.04LTSのバグが原因だと思われる。

2.については、これも、Ubuntu16.04LTSでしか発生しないのだが、その原因はメモリアロケーション関連で、作者のコードに問題はない筈ではあるのだが、複雑なアロケーションが必要になるケースなので、Ubuntu14.04LTSでは偶々動作している、という可能性もある。

3.については、これが一番難解だったのだが、作者のコードにバグがある事が判明した。

と、いう事で、1.2.については、問題を回避するコードに変更し、3.についてはバグを修正したので、現時点では、問題は発生しなくなっている。

で、何故、1.の様な現象が発生したのか、というと、Dialogに対するマウスボタンのPress / Releaseイベントが一回のボタンクリックで2回ずつ発生しているからだ。

具体的には、マウスボタンをクリックすると、Press->Press->Release->Releaseという感じでイベントが発生する。なので、スクリーンキーボードでは、1回のクリックを2回のクリックと判断し、1回のクリックで同じ文字を2回出力する格好になった訳だ。

この問題への対策としては、一連の2回のイベントでは、イベントオブジェクトにあるtimeフィールドに同じ時間が入っていたので、この時間が同じだった場合、2回目のイベントは無視する、という処理を追加した。

上記の時間はmSec単位なので、通常のマウスクリックでは、いくら高速にクリックしても、クリックを2回行えば、別の時間が入る筈だ。なので、上記の問題はUbuntu16.04LTS固有なのだが、コード的には、Ubuntu14.04LTSでも同じにした。

この対処方法についても、将来的にUbuntu16.04LTSのバグが修正されれば、無意味にはなるのだが、実害も殆ど無い筈だ。

2.については、Dialogクラスをベースにしたクラスのメモリアロケーションで問題が出るのだが、最初はスタック上に作成していたオブジェクトがメモリ破壊して、そのクラスを破棄するタイミングで、スタック破壊が原因でクラッシュが発生していた。

なので、オブジェクトをnewを使ってヒープ上に作成しようとしてみた所、今度は、newの最中にクラッシュが発生する様になってしまった。

原因は良く判らないのだが、上記のクラス変数には別クラスのオブジェクトがあったので、それをポインタに変更し、コンストラクタ内でnewを使って生成する様に変更すると、問題は無くなった。

と、いう事で、この問題に関しては、Ubuntu16.04LTSが悪いのか、というと微妙なのだが、Ubuntu16.04LTS用のDialogの基底クラスのソースコードに問題がある可能性はあるかもしれない。

3.の問題については、現行版にも存在している筈なのだが、Ubuntu版Mirror-DTCクライアントに固有のバグから発生する問題だ。

このバグというのは、昨日書いた様に、Mirror-DTCでは、通常はメインスレッドを使わないのだが、UbuntuのGTK関連のAPIはメインスレッドから呼び出さないと正しく動作しないので、クリップボードの読み出し処理でも、Ubuntu版では特別な細工を入れていたのだが、この細工用の処理コードに問題があった。

具体的には、クリップ転送を許可したタイミングで、クリップボードに1024バイト以上のテキストが存在した場合には、メモリ破壊を引き起こす場合があった。

上記の問題は、明らかに作者のバグが原因だったので、修正したのだが、サーバー側でも同じ処理がある筈、と、見てみると、サーバー側については、正しいコードになっていた。

と、いう事で、最後のバグは微妙なのだが、今回、修正を入れたので、Ver1.3.0.1では、クリップ転送も、比較的、安心して使える様にはなる筈だ。

= この記事に関連する公開中ソフト =

Mirror-DTC

Mirror-DTC

(2016/10/25追記)

« Ubuntu版も完成 | トップページ | Mirror-DTC for Ubuntu 1.3.0.1を公開 »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/63890246

この記事へのトラックバック一覧です: Ubuntu版も順延:

« Ubuntu版も完成 | トップページ | Mirror-DTC for Ubuntu 1.3.0.1を公開 »

2017年8月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google