[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:19582] Bug#JP/1122: wmppxp makes zombie process



----Next_Part(Wed_Dec_15_23:42:48_1999_953)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

佐藤です。

From: Wataru SATO <wsato@xxxxxxxxxxxxxxx>
Subject: [debian-users:19535] Bug#JP/1122: wmppxp makes zombie process
Date: Sat, 11 Dec 1999 14:48:06 +0900

> Package: wmppxp
> Version: 0.51.0-1
> Severity: normal
> 
> 次の手順で zombie プロセスが残ってしまいます。
>   1. wmppxp を起動
>   2. 上向きの三角ボタンを押してログを出力するウィンドウを表示
>   3. そのウィンドウを閉じる
> 
> # fork した子プロセスを wait していないようです。
> 
> -- System Information
> Debian Release: potato
> Kernel Version: Linux lnote 2.2.13 #1 Sun Oct 31 13:50:40 JST 1999 i586 unknown
> 
> Versions of the packages wmppxp depends on:
> ii  libc6           2.1.2-10       GNU C Library: Shared libraries and timezone
> ii  libglib1.2      1.2.6-1        The GLib library of C routines
> ii  libgtk1.2       1.2.6-1        The GIMP Toolkit set of widgets for X
> ii  ppxp            0.99072807-2   Yet another PPP program.
> ii  xlib6g          3.3.5-2        shared libraries required by X clients
> ii  xpm4g           3.4k-5         the X PixMap library

ちょっとした patch を作ってみました。
# とりあえず動いているようです。

----Next_Part(Wed_Dec_15_23:42:48_1999_953)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="wmppxp.c.diff"

--- wmppxp.c.orig	Tue Dec 14 12:14:41 1999
+++ wmppxp.c	Tue Dec 14 12:14:53 1999
@@ -4,6 +4,8 @@
 #include <unistd.h>
 #include <time.h>
 #include <signal.h>
+#include <sys/types.h>
+#include <wait.h>
 
 /* X-Window function definition */
 #include <X11/Xlib.h>
@@ -34,6 +36,9 @@
 BOOL ConnectPPxP( int argc, char *argv[] );
 BOOL DisconnectPPxP();
 void CheckPPxPStat( struct xcio_s *xcio );
+static void WMPPxPSetSignalHandler();
+static void WMPPxPSignalHandler(int sig);
+
 
 #ifdef _USE_GTK
 void ParseArgument( int argc, char **argv );
@@ -49,6 +54,14 @@
   {
     if( *argv[i] == '-' )
     {
+      int c = argv[i][1];
+      switch(c){
+      case 'b':
+	/* baud rate */
+	i ++;
+	baud_rate = atoi(argv[i]);
+	break;
+      }
     }
     else if( i != 0 )
     {
@@ -67,6 +80,9 @@
   /* Create X-Window */
   CreateXWindow( argc, argv );
 
+  /* signal handerl */
+  WMPPxPSetSignalHandler();
+
   /* wmppxp main command routine */
   WMPPxPRoutine( argc, argv );
 
@@ -274,3 +290,21 @@
   }
 }
 
+static void WMPPxPSetSignalHandler(){
+  struct sigaction act;
+
+  act.sa_handler = WMPPxPSignalHandler;
+  sigemptyset(&act.sa_mask);
+  act.sa_flags = 0;
+  sigaction(SIGCHLD, &act, NULL);
+}
+
+static void WMPPxPSignalHandler(int sig){
+  pid_t pid;
+
+  switch (sig){
+  case SIGCHLD:
+    while(waitpid(0, NULL, WNOHANG) > 0);
+    break;
+  }
+}

----Next_Part(Wed_Dec_15_23:42:48_1999_953)----