From owner-freebsd-threads@FreeBSD.ORG Wed Jan 5 09:40:30 2005 Return-Path: Delivered-To: freebsd-threads@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 394BC16A4CE for ; Wed, 5 Jan 2005 09:40:30 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 227AA43D49 for ; Wed, 5 Jan 2005 09:40:30 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.1/8.13.1) with ESMTP id j059eUDn008759 for ; Wed, 5 Jan 2005 09:40:30 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.1/8.13.1/Submit) id j059eT9N008758; Wed, 5 Jan 2005 09:40:29 GMT (envelope-from gnats) Date: Wed, 5 Jan 2005 09:40:29 GMT Message-Id: <200501050940.j059eT9N008758@freefall.freebsd.org> To: freebsd-threads@FreeBSD.org From: Roman Nikitchenko Subject: Re: threads/75795: applications linked with -lc_r can't close() fd opened by kqueue(). X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Roman Nikitchenko List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Jan 2005 09:40:30 -0000 The following reply was made to PR threads/75795; it has been noted by GNATS. From: Roman Nikitchenko To: freebsd-gnats-submit@FreeBSD.org, roman@trifle.net Cc: Subject: Re: threads/75795: applications linked with -lc_r can't close() fd opened by kqueue(). Date: Wed, 05 Jan 2005 11:33:04 +0200 The reason was in unimplemented kqueue_stat() call (libc_r close() relays on fstat() ). Here is my own version (sys/kern/kern_event.c) i used to workaround problem: /*ARGSUSED*/ static int kqueue_stat(struct file *fp, struct stat *st, struct ucred *active_cred, struct thread *td) { struct kqueue *kq; int error; if ((error = kqueue_aquire(fp, &kq))) return ENOENT; KQ_LOCK(kq); bzero((void *)st, sizeof(*st)); st->st_size = kq->kq_count; kqueue_release(kq, 1); KQ_UNLOCK(kq); st->st_blksize = sizeof(struct kevent); st->st_mode = S_IFIFO; return (0); } Please check / apply this as soon as possible. Any binary transfered from 4.x system and using kevent() subsystem won't work until this will be done. Any application with kevent()'s linked against libc_r too. -- WBR, Roman Nikitchenko, http://smartgate.wtelecom.net _,,,_|\_/|_,,,_