Comments (28)
おつかれさまでした!参加した感想をブログとかにまとめてくれるとOSS Gateワークショップの普及につながってうれしいです!
(次回からはフィードバックしたメンターの人にその場でcloseしてもらうようにしよう。おつかれ!とか言いながら。)
from workshop.
やること:
- twmの改変をした方に、本家にコードを取り込んで貰っても良いか確認をとる。ライセンス周りについても相談する
- コードを取り込んでもらう先がどこか調べる
- 改変したtwmがクラッシュする原因の特定と修正をする
from workshop.
- twmの改変をした方に、本家にコードを取り込んで貰っても良いか確認をとる。ライセンス周りについても相談する
メールを送った!
from workshop.
- コードを取り込んでもらう先がどこか調べる
調べたところ、X.org Foundation下のプロジェクトなのではないか
from workshop.
- 改変したtwmがクラッシュする原因の特定と修正をする
フォント周りが怪しい?
from workshop.
- コードを取り込んでもらう先がどこか調べる
調べたところ、X.org Foundation下のプロジェクトなのではないか
メンターの方からアップストリームがあるという話を聞き、https://cgit.freedesktop.org/cgit/?url=xorg/app/twm/にたどり着いた
from workshop.
- twmの改変をした方に、本家にコードを取り込んで貰っても良いか確認をとる。ライセンス周りについても相談する
メールを送った!
「異存はありません。」という返事をいただけた!
from workshop.
https://cgit.freedesktop.org/cgit/?url=xorg/app/twm/にどうしたらコードを取り込んで貰えるのか調べる
from workshop.
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.
For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches/
この方法に従えば良さそうなことが分かった
from workshop.
gdbを使う方法をhttps://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb1.htmlを参考にして、twmのMakefileを編集してビルドしてみた
from workshop.
デバッグに使うツールのページを発見したhttp://wiki.x.org/wiki/XorgTesting/が、有用な情報はなかった
from workshop.
パッチをgist.github.comに公開した
https://gist.github.com/knokmki612/c708950eddf5e129f0fc
from workshop.
クラッシュが確認されている.twmrcをgist.github.comに公開した
https://gist.github.com/knokmki612/06ba86531b0fcb937e32
from workshop.
クラッシュが確認されている.twmrcをgist.github.comに公開した
https://gist.github.com/knokmki612/06ba86531b0fcb937e32
この.twmrcの
MenuRuns "l2r"
というオプションが有効である状態でメニューの呼び出しを行うと、クラッシュすることが分かった
from workshop.
起動した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.
(gdb) bt
をすると、MyFont_DrawString_Rotatedを呼び出しているのが、
PaintEntry ... at menus.c : 530
であることが分かった。
from workshop.
MenuRuns "l2r"
を無効にした状態でgdbで直前にブレークポイントを設定し、p fontをしたところ、値がなかった。にも関わらず動いているのは、MyFont_DrawString_Rotated以外では使わない値であるためだと思われる。
この状態でもutil.cのGetFontで値がなければ終了するはずなのに、GetFontが正常に呼ばれていない可能性がある
from workshop.
私がビルドできているもののtar.gzをアップロードした
https://drive.google.com/open?id=0BwLKJ6vnpcYkMWNLb0xCN2tpcjg
from workshop.
twm.cでScr->HaveFontsがFALSEだとCreateFontsが呼ばれるはずなのにCreateFontsが一度も呼ばれていない可能性があったため、この部分をgdbで追う必要があった。
メンターの方から該当部分の前にsleepを噛ませて、その間にgdbを起動してみてはと言われたので、twm.cを修正してビルドをした。
from workshop.
gdbで追った結果、Scr->HaveFontsに1が立っていたので、初期化時は0だったのが、どの段階で1が立っているのか調べれば良い所まで進むことが出来た。
from workshop.
結局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.
元をたどれば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.
そして、MyFont_DrawString_RotatedではXSetFontでフォントを指定する箇所があるが、これはXFontStruct用の関数であるために、use_fontsetがtrueになる実行環境で落ちていることが分かった。
なので、if(!use_fontset)にXSetFontの箇所を移した。
if (!use_fontset)
XSetFont(dpy, MonoGC, font->font->fid);
from workshop.
なお、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.
無事動くようになったため使ってみたところ、ウィンドウのタイトルバーの文字列が更新されないのが気になったため調べた。
すると、MyFont_DrawString_Rotated内で主な処理をif (*pixp == None)で囲むことによって、一度タイトルバーで文字を表示したら更新しないようになっていた。これを削ったところ、文字列が更新されるようになった。
from workshop.
気になっていること: 改変で追加された機能と競合しているために削られた処理があり、パッチが受け付けられるか不安
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.
動作の様子(twmrcにTitleAtRight, MenuAtLeft, MenuUpward, MenuRuns "l2r"を書くとこうなります)
from workshop.
Related Issues (20)
- OSS Gate Workshop: online: 2024-06-08: fusen: OSS_NAME: Work log HOT 21
- OSS Gate Workshop: online: 2024-06-08: kuraryu: wheel: Work log HOT 41
- OSS Gate Workshop: online: 2024-06-08: wxqmailbox: Tabnine: Work log HOT 5
- OSS Gateオンラインワークショップ2024-07-27
- OSS Gateワークショップ2024-09-xx HOT 1
- OSS Gate Workshop: online: 2024-07-27: daipom: Fluentd: Work log HOT 11
- OSS Gate Workshop: online: 2024-07-27: blacktoad30: GNU Guix: Work log HOT 10
- OSS Gate Workshop: Online: 2024-07-27: jkyochen: Fluentd: Work log HOT 19
- OSS Gate Workshop: online: 2024-07-27: otegami: PGroonga: Work log HOT 5
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: tadsan: deepcopy: Work log HOT 5
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: hana979: laravel/pint: Work log HOT 11
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: myou1985: django-debug-toolbar: Work log HOT 15
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: noko1024: python/websockets Work log HOT 4
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: fujiokayu: ${OSS_NAME}: Work log HOT 1
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: tetrapod418: ${OSS_NAME}: Work log HOT 29
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: otoyuzu705: python-dotenv: Work log HOT 14
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: satou-haruka-37: ransack: Work log HOT 47
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: 斉藤賢悟: react-hook-form: Work log HOT 15
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: pepi-p: python-skyfield: Work log HOT 7
- OSS Gate Workshop: ゆるい勉強会旭川: 2024-07-28: TadaTeruki: winit: Work log HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from workshop.