GithubHelp home page GithubHelp logo

Comments (28)

kou avatar kou commented on July 29, 2024 1

おつかれさまでした!参加した感想をブログとかにまとめてくれるとOSS Gateワークショップの普及につながってうれしいです!
(次回からはフィードバックしたメンターの人にその場でcloseしてもらうようにしよう。おつかれ!とか言いながら。)

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

やること:

  • twmの改変をした方に、本家にコードを取り込んで貰っても良いか確認をとる。ライセンス周りについても相談する
  • コードを取り込んでもらう先がどこか調べる
  • 改変したtwmがクラッシュする原因の特定と修正をする

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024
  • twmの改変をした方に、本家にコードを取り込んで貰っても良いか確認をとる。ライセンス周りについても相談する

メールを送った!

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024
  • コードを取り込んでもらう先がどこか調べる

調べたところ、X.org Foundation下のプロジェクトなのではないか

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024
  • 改変したtwmがクラッシュする原因の特定と修正をする

フォント周りが怪しい?

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024
  • コードを取り込んでもらう先がどこか調べる

調べたところ、X.org Foundation下のプロジェクトなのではないか

メンターの方からアップストリームがあるという話を聞き、https://cgit.freedesktop.org/cgit/?url=xorg/app/twm/にたどり着いた

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024
  • twmの改変をした方に、本家にコードを取り込んで貰っても良いか確認をとる。ライセンス周りについても相談する

メールを送った!

「異存はありません。」という返事をいただけた!

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

https://cgit.freedesktop.org/cgit/?url=xorg/app/twm/にどうしたらコードを取り込んで貰えるのか調べる

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

READMEを読んでいたら

For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches/

All questions regarding this software should be directed at the
Xorg mailing list: http://lists.freedesktop.org/mailman/listinfo/xorg

というのを見つけた

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches/

この方法に従えば良さそうなことが分かった

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

gdbを使う方法をhttps://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb1.htmlを参考にして、twmのMakefileを編集してビルドしてみた

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

デバッグに使うツールのページを発見したhttp://wiki.x.org/wiki/XorgTesting/が、有用な情報はなかった

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

パッチをgist.github.comに公開した
https://gist.github.com/knokmki612/c708950eddf5e129f0fc

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

クラッシュが確認されている.twmrcをgist.github.comに公開した
https://gist.github.com/knokmki612/06ba86531b0fcb937e32

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

クラッシュが確認されている.twmrcをgist.github.comに公開した
https://gist.github.com/knokmki612/06ba86531b0fcb937e32

この.twmrcの

MenuRuns "l2r"

というオプションが有効である状態でメニューの呼び出しを行うと、クラッシュすることが分かった

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

起動したtwmを、別の仮想コンソールでgdb --pid (twmのpid)でデバッグできる状態になることが分かった。その後、

(gdb) continue

をしてメニューを呼び出すと、Segmentation Faultとなった。その際のメッセージとして

MyFont_DrawString_Rotated ... at util.c : 754

の辺りで落ちていることが分かった。また、

(gdb) p font
(gdb) p font->font

をしたら、p font->fontに値が入っていないことが分かった。

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024
(gdb) bt

をすると、MyFont_DrawString_Rotatedを呼び出しているのが、

PaintEntry ... at menus.c : 530

であることが分かった。

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

MenuRuns "l2r"

を無効にした状態でgdbで直前にブレークポイントを設定し、p fontをしたところ、値がなかった。にも関わらず動いているのは、MyFont_DrawString_Rotated以外では使わない値であるためだと思われる。

この状態でもutil.cのGetFontで値がなければ終了するはずなのに、GetFontが正常に呼ばれていない可能性がある

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

私がビルドできているもののtar.gzをアップロードした
https://drive.google.com/open?id=0BwLKJ6vnpcYkMWNLb0xCN2tpcjg

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

twm.cでScr->HaveFontsがFALSEだとCreateFontsが呼ばれるはずなのにCreateFontsが一度も呼ばれていない可能性があったため、この部分をgdbで追う必要があった。
メンターの方から該当部分の前にsleepを噛ませて、その間にgdbを起動してみてはと言われたので、twm.cを修正してビルドをした。

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

gdbで追った結果、Scr->HaveFontsに1が立っていたので、初期化時は0だったのが、どの段階で1が立っているのか調べれば良い所まで進むことが出来た。

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

結局HaveFontsがtrueになる経路は、
main(twm.c)→ParseTwmrc(parse.c)→doparse(parse.c)→yyparse(gram.c)→AddtToMenu(menu.c)→CreateFonts(twm.c)→GetFont(util.c)
であることが分かった。
CreateFontsはちゃんと一度は呼ばれていることになり、動きとしては正常であることが分かった。

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

元をたどればMyFont_DrawString_Rotatedにおけるfont->fontに値が入っていないのが問題だったので、GetFontが上手く機能していないかを眺めた。
結論としてはGetFontではuse_fontsetというフラグで処理が分けられており、trueだとXFontSet型のMyFont font->fontsetに値が入り、falseだとXFontStruct型のMyFont font->fontに値が入るようになっていた。
この違いはXにおけるフォント、テキスト表示で、前者はマルチバイト、後者は8ビット固定のものを扱うものらしい。(参考: ウィンドウマネージャーの国際化 http://www8.plala.or.jp/tkubota1/winman.ja.html)

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

そして、MyFont_DrawString_RotatedではXSetFontでフォントを指定する箇所があるが、これはXFontStruct用の関数であるために、use_fontsetがtrueになる実行環境で落ちていることが分かった。
なので、if(!use_fontset)にXSetFontの箇所を移した。

    if (!use_fontset)
        XSetFont(dpy, MonoGC, font->font->fid);

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

なお、use_fontsetがtrueになるかどうかはtwm.c:290あたりに書いてあるが、ロケールが"CまたはPOSIX"以外かどうかとかを見ているみたい。

    loc = setlocale(LC_ALL, "");
    if (!loc || !strcmp(loc, "C") || !strcmp(loc, "POSIX") ||
        !XSupportsLocale()) {
         use_fontset = False;
    } else {
         use_fontset = True;
    }

ちなみに利用していた人に聞いてみたところ、「export LANG=Cが普通」とか言っていたので、今まで誰も落ちなかったのは、たまたまそういう人しか使っていなかったためだと思われる

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

無事動くようになったため使ってみたところ、ウィンドウのタイトルバーの文字列が更新されないのが気になったため調べた。
すると、MyFont_DrawString_Rotated内で主な処理をif (*pixp == None)で囲むことによって、一度タイトルバーで文字を表示したら更新しないようになっていた。これを削ったところ、文字列が更新されるようになった。

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

気になっていること: 改変で追加された機能と競合しているために削られた処理があり、パッチが受け付けられるか不安

add_window.c:700あたり

       }
     } else {       /* put it where asked, mod title bar */
- /* if the gravity is towards the top, move it by the title height */
- if (gravy < 0) tmp_win->attr.y -= gravy * tmp_win->title_height;
     }

twm.c:882あたり

          &JunkWidth, &JunkHeight, &bw, &JunkDepth)) {

  GetGravityOffsets (tmp, &gravx, &gravy);
- if (gravy < 0) xwc.y -= tmp->title_height;

  if (bw != tmp->old_bw) {
      int xoff, yoff;

from workshop.

knokmki612 avatar knokmki612 commented on July 29, 2024

動作の様子(twmrcにTitleAtRight, MenuAtLeft, MenuUpward, MenuRuns "l2r"を書くとこうなります)
_2016-03-29_22-07-48

from workshop.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.