kwinが固まるパターン

kwinが固まるパターン

sid の kwin (というか kdebase 4:2.2.2-14) はこれで直るみたい。

--- kdebase-2.2.2/kwin/workspace.cpp	2001-11-07 15:50:31.000000000 +0900
+++ /home/morimoto/workspace.cpp	2002-07-27 16:59:06.000000000 +0900
@@ -966,6 +966,11 @@
     {
     Client* c = topClientOnDesktop();
     Client* nc = c;
+
+    if ( !c ) {
+        return;
+    }
+
     if ( !forward ){
         do {
             nc = previousStaticClient(nc);

ただ Alt+Tab を処理するコードはウインドウ巡回モードが KDE 準拠か CDE 準拠かによって分かれており、上のやつは CDE 準拠な場合のやつなのであれ。

それまではこんなのを cron で定期起動して怪しかったら kwin を再起動していた。

 #!/usr/bin/perl

open(PS, 'ps ax|') || die;
while(<PS>){
    if(/(kdeinit:)* kwin/){
	($kwin_pid) = /^\s*(\d+)\s/;
	warn "kwin pid: $kwin_pid\n";
	last;
    }
}
close(PS);

exit 0 unless $kwin_pid;

open(TOP, 'top n 1 b|') || die;
while(<TOP>){
    if(/^\s*$kwin_pid\s/){
	$kwin_load = scalar(substr($_, 45, 2));
	warn "kwin load: $kwin_load\n";
	last;
    }
}
close(TOP);

exit 0 unless $kwin_load;

if($kwin_load > 95){
   kill 9, $kwin_pid;
   sleep 3;
   system('/usr/bin/kwin -display :0 &');
}

kdebase 一式、Pentium III 600MHz で debuild に 3 時間かかる。たいへんだ。