Date: 01 Jun 1998 19:01:44 -0400 From: Kevin Street <street@iname.com> To: Amancio Hasty <hasty@rah.star-gate.com> Cc: Terry Lambert <tlambert@primenet.com>, mike@smith.net.au, rminnich@Sarnoff.COM, doconnor@gsoft.com.au, hackers@FreeBSD.ORG Subject: Re: Star Office Installation Message-ID: <87d8csvi93.fsf@kstreet.interlog.com> In-Reply-To: Amancio Hasty's message of "Sun, 31 May 1998 02:42:44 -0700" References: <199805310942.CAA20634@rah.star-gate.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Amancio Hasty <hasty@rah.star-gate.com> writes: > Well, I guess on Linux star office misbehaves by deleting its ipc > shared data segments when it exits. > > Most likely whats going is that we are not handling properly the ipc > calls or possibly something else which is causing Star Office not > to delete the ipc shared data segments upon exit. I have a possible fix for this. I have not tested this with Star Office (I downloaded 3.1 which does not have the problem, I took a look for 4, but at the dl rate I'm currently getting it's an 8 hour download ... I'm not going to do this) but x11amp was also leaving shared segments around and it's a *lot* smaller. x11amp appears to be calling shmctl(id, IPC_RMID, 0) and the emulation layer does not like the null shmid_ds buffer pointer. The emulation layer returned an error without ever calling FreeBSD's shmctl, so the segments were not being deleted when the reference count went to zero. I think there's a high probability that Star Office does the same thing. Can someone who has Star Office 4 try this patch out and confirm whether this works for Star Office too? To try it: save the following patch to /tmp/linux.pat modstat modunload -i <id> cd /usr/src/sys/i386/linux patch < /tmp/linux.pat cd /usr/src/lkm/linux make all install linux run star office and check to see if the shared segments are being cleaned up after it exits. Here's the patch to /usr/src/sys/i386/linux/linux_ipc.c *** linux_ipc.c.orig Mon Jun 1 11:35:17 1998 --- linux_ipc.c Mon Jun 1 14:02:11 1998 *************** *** 430,443 **** case LINUX_IPC_RMID: bsd_args.shmid = args->arg1; bsd_args.cmd = IPC_RMID; ! if ((error = copyin(args->ptr, (caddr_t)&linux_shmid, ! sizeof(linux_shmid)))) ! return error; ! linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid); ! bsd_args.buf = (struct shmid_ds*)stackgap_alloc(&sg, sizeof(struct shmid_ds)); ! if ((error = copyout((caddr_t)&bsd_shmid, (caddr_t)bsd_args.buf, ! sizeof(struct shmid_ds)))) ! return error; return shmctl(p, &bsd_args); case LINUX_IPC_INFO: --- 430,447 ---- case LINUX_IPC_RMID: bsd_args.shmid = args->arg1; bsd_args.cmd = IPC_RMID; ! if (NULL == args->ptr) ! bsd_args.buf = NULL; ! else { ! if ((error = copyin(args->ptr, (caddr_t)&linux_shmid, ! sizeof(linux_shmid)))) ! return error; ! linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid); ! bsd_args.buf = (struct shmid_ds*)stackgap_alloc(&sg, sizeof(struct shmid_ds)); ! if ((error = copyout((caddr_t)&bsd_shmid, (caddr_t)bsd_args.buf, ! sizeof(struct shmid_ds)))) ! return error; ! } return shmctl(p, &bsd_args); case LINUX_IPC_INFO: -- Kevin Street street@iName.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?87d8csvi93.fsf>