From 1de0643c9218db536f5b2e294bbfa653c77438e4 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Tue, 4 Sep 2012 00:33:09 +0200 Subject: Switch from cthreads to pthreads Makefiles, headers, types, macros and function calls are renamed where appropriate. Most of this work was done by Barry deFreese and Thomas DiModica. * auth/Makefile: Switch from cthreads to pthreads. * auth/auth.c: Likewise. * boot/Makefile: Likewise. * boot/boot.c: Likewise. * boot/ux.c: Likewise. * console-client/Makefile: Likewise. * console-client/console.c: Likewise. * console-client/driver.c: Likewise. * console-client/driver.h: Likewise. * console-client/generic-speaker.c: Likewise. * console-client/kbd-repeat.c: Likewise. * console-client/ncursesw.c: Likewise. * console-client/pc-kbd.c: Likewise. * console-client/pc-mouse.c: Likewise. * console-client/timer.c: Likewise. * console-client/trans.c: Likewise. * console-client/vga.c: Likewise. * console/Makefile: Likewise. * console/console.c: Likewise. * console/display.c: Likewise. * console/input.c: Likewise. * console/pager.c: Likewise. * defpager/backing.c: Likewise. * exec/Makefile: Likewise. * exec/exec.c: Likewise. * exec/hashexec.c: Likewise. * exec/priv.h: Likewise. * ext2fs/Makefile: Likewise. * ext2fs/balloc.c: Likewise. * ext2fs/dir.c: Likewise. * ext2fs/ext2fs.c: Likewise. * ext2fs/ext2fs.h: Likewise. * ext2fs/ialloc.c: Likewise. * ext2fs/inode.c: Likewise. * ext2fs/msg.c: Likewise. * ext2fs/pager.c: Likewise. * ext2fs/pokel.c: Likewise. * ext2fs/storeinfo.c: Likewise. * ext2fs/truncate.c: Likewise. * fatfs/Makefile: Likewise. * fatfs/dir.c: Likewise. * fatfs/fat.c: Likewise. * fatfs/fatfs.h: Likewise. * fatfs/inode.c: Likewise. * fatfs/main.c: Likewise. * fatfs/pager.c: Likewise. * fatfs/virt-inode.c: Likewise. * ftpfs/Makefile: Likewise. * ftpfs/ccache.c: Likewise. * ftpfs/ccache.h: Likewise. * ftpfs/conn.c: Likewise. * ftpfs/dir.c: Likewise. * ftpfs/fs.c: Likewise. * ftpfs/ftpfs.c: Likewise. * ftpfs/ftpfs.h: Likewise. * ftpfs/ncache.c: Likewise. * ftpfs/netfs.c: Likewise. * ftpfs/node.c: Likewise. * hostmux/Makefile: Likewise. * hostmux/hostmux.h: Likewise. * hostmux/mux.c: Likewise. * hostmux/node.c: Likewise. * hostmux/stubs.c: Likewise. * hurd/shared.h: Likewise. * isofs/Makefile: Likewise. * isofs/inode.c: Likewise. * isofs/lookup.c: Likewise. * isofs/main.c: Likewise. * isofs/pager.c: Likewise. * libcons/Makefile: Likewise. * libcons/cons-switch.c: Likewise. * libcons/cons.h: Likewise. * libcons/dir-changed.c: Likewise. * libcons/file-changed.c: Likewise. * libcons/init-init.c: Likewise. * libcons/vcons-close.c: Likewise. * libcons/vcons-input.c: Likewise. * libcons/vcons-move-mouse.c: Likewise. * libcons/vcons-open.c: Likewise. * libcons/vcons-scrollback.c: Likewise. * libdiskfs/Makefile: Likewise. * libdiskfs/boot-start.c: Likewise. * libdiskfs/dead-name.c: Likewise. * libdiskfs/dir-chg.c: Likewise. * libdiskfs/dir-link.c: Likewise. * libdiskfs/dir-lookup.c: Likewise. * libdiskfs/dir-mkdir.c: Likewise. * libdiskfs/dir-mkfile.c: Likewise. * libdiskfs/dir-readdir.c: Likewise. * libdiskfs/dir-rename.c: Likewise. * libdiskfs/dir-renamed.c: Likewise. * libdiskfs/dir-rmdir.c: Likewise. * libdiskfs/dir-unlink.c: Likewise. * libdiskfs/disk-pager.c: Likewise. * libdiskfs/diskfs-pager.h: Likewise. * libdiskfs/diskfs.h: Likewise. * libdiskfs/file-access.c: Likewise. * libdiskfs/file-chg.c: Likewise. * libdiskfs/file-exec.c: Likewise. * libdiskfs/file-get-fs-opts.c: Likewise. * libdiskfs/file-get-trans.c: Likewise. * libdiskfs/file-get-transcntl.c: Likewise. * libdiskfs/file-getcontrol.c: Likewise. * libdiskfs/file-getfh.c: Likewise. * libdiskfs/file-lock-stat.c: Likewise. * libdiskfs/file-lock.c: Likewise. * libdiskfs/file-reparent.c: Likewise. * libdiskfs/file-set-trans.c: Likewise. * libdiskfs/file-sync.c: Likewise. * libdiskfs/file-syncfs.c: Likewise. * libdiskfs/fsys-getroot.c: Likewise. * libdiskfs/fsys-options.c: Likewise. * libdiskfs/fsys-syncfs.c: Likewise. * libdiskfs/ifsock.c: Likewise. * libdiskfs/init-first.c: Likewise. * libdiskfs/init-init.c: Likewise. * libdiskfs/init-startup.c: Likewise. * libdiskfs/io-duplicate.c: Likewise. * libdiskfs/io-get-conch.c: Likewise. * libdiskfs/io-identity.c: Likewise. * libdiskfs/io-map-cntl.c: Likewise. * libdiskfs/io-map.c: Likewise. * libdiskfs/io-modes-get.c: Likewise. * libdiskfs/io-modes-off.c: Likewise. * libdiskfs/io-modes-on.c: Likewise. * libdiskfs/io-modes-set.c: Likewise. * libdiskfs/io-owner-get.c: Likewise. * libdiskfs/io-owner-mod.c: Likewise. * libdiskfs/io-prenotify.c: Likewise. * libdiskfs/io-read.c: Likewise. * libdiskfs/io-readable.c: Likewise. * libdiskfs/io-reauthenticate.c: Likewise. * libdiskfs/io-rel-conch.c: Likewise. * libdiskfs/io-restrict-auth.c: Likewise. * libdiskfs/io-revoke.c: Likewise. * libdiskfs/io-seek.c: Likewise. * libdiskfs/io-sigio.c: Likewise. * libdiskfs/io-stat.c: Likewise. * libdiskfs/io-write.c: Likewise. * libdiskfs/lookup.c: Likewise. * libdiskfs/name-cache.c: Likewise. * libdiskfs/node-drop.c: Likewise. * libdiskfs/node-make.c: Likewise. * libdiskfs/node-nput.c: Likewise. * libdiskfs/node-nputl.c: Likewise. * libdiskfs/node-nref.c: Likewise. * libdiskfs/node-nrefl.c: Likewise. * libdiskfs/node-nrele.c: Likewise. * libdiskfs/node-nrelel.c: Likewise. * libdiskfs/peropen-rele.c: Likewise. * libdiskfs/priv.h: Likewise. * libdiskfs/shutdown.c: Likewise. * libdiskfs/sync-interval.c: Likewise. * libfshelp/Makefile: Likewise. * libfshelp/fetch-root.c: Likewise. * libfshelp/fshelp.h: Likewise. * libfshelp/get-identity.c: Likewise. * libfshelp/lock-acquire.c: Likewise. * libfshelp/lock-init.c: Likewise. * libfshelp/locks.h: Likewise. * libfshelp/set-active.c: Likewise. * libfshelp/trans.h: Likewise. * libfshelp/transbox-init.c: Likewise. * libiohelp/Makefile: Likewise. * libiohelp/get_conch.c: Likewise. * libiohelp/handle_io_release_conch.c: Likewise. * libiohelp/initialize_conch.c: Likewise. * libiohelp/iohelp.h: Likewise. * libiohelp/verify_user_conch.c: Likewise. * libnetfs/Makefile: Likewise. * libnetfs/dir-lookup.c: Likewise. * libnetfs/dir-mkdir.c: Likewise. * libnetfs/dir-mkfile.c: Likewise. * libnetfs/dir-readdir.c: Likewise. * libnetfs/dir-rmdir.c: Likewise. * libnetfs/dir-unlink.c: Likewise. * libnetfs/drop-node.c: Likewise. * libnetfs/file-chauthor.c: Likewise. * libnetfs/file-check-access.c: Likewise. * libnetfs/file-chflags.c: Likewise. * libnetfs/file-chmod.c: Likewise. * libnetfs/file-chown.c: Likewise. * libnetfs/file-exec.c: Likewise. * libnetfs/file-get-storage-info.c: Likewise. * libnetfs/file-get-translator.c: Likewise. * libnetfs/file-lock-stat.c: Likewise. * libnetfs/file-lock.c: Likewise. * libnetfs/file-reparent.c: Likewise. * libnetfs/file-set-size.c: Likewise. * libnetfs/file-set-translator.c: Likewise. * libnetfs/file-statfs.c: Likewise. * libnetfs/file-sync.c: Likewise. * libnetfs/file-syncfs.c: Likewise. * libnetfs/file-utimes.c: Likewise. * libnetfs/fsys-getroot.c: Likewise. * libnetfs/fsys-set-options.c: Likewise. * libnetfs/init-init.c: Likewise. * libnetfs/io-clear-some-openmodes.c: Likewise. * libnetfs/io-duplicate.c: Likewise. * libnetfs/io-get-openmodes.c: Likewise. * libnetfs/io-get-owner.c: Likewise. * libnetfs/io-identity.c: Likewise. * libnetfs/io-mod-owner.c: Likewise. * libnetfs/io-read.c: Likewise. * libnetfs/io-readable.c: Likewise. * libnetfs/io-reauthenticate.c: Likewise. * libnetfs/io-restrict-auth.c: Likewise. * libnetfs/io-revoke.c: Likewise. * libnetfs/io-seek.c: Likewise. * libnetfs/io-set-all-openmodes.c: Likewise. * libnetfs/io-set-some-openmodes.c: Likewise. * libnetfs/io-stat.c: Likewise. * libnetfs/io-write.c: Likewise. * libnetfs/make-node.c: Likewise. * libnetfs/netfs.h: Likewise. * libnetfs/nput.c: Likewise. * libnetfs/nref.c: Likewise. * libnetfs/nrele.c: Likewise. * libnetfs/release-peropen.c: Likewise. * libnetfs/shutdown.c: Likewise. * libpager/Makefile: Likewise. * libpager/chg-compl.c: Likewise. * libpager/clean.c: Likewise. * libpager/data-request.c: Likewise. * libpager/data-return.c: Likewise. * libpager/data-unlock.c: Likewise. * libpager/inhibit-term.c: Likewise. * libpager/lock-completed.c: Likewise. * libpager/lock-object.c: Likewise. * libpager/mark-error.c: Likewise. * libpager/no-senders.c: Likewise. * libpager/object-init.c: Likewise. * libpager/object-terminate.c: Likewise. * libpager/offer-page.c: Likewise. * libpager/pager-attr.c: Likewise. * libpager/pager-create.c: Likewise. * libpager/pager-shutdown.c: Likewise. * libpager/priv.h: Likewise. * libpager/seqnos.c: Likewise. * libpipe/Makefile: Likewise. * libpipe/pipe.c: Likewise. * libpipe/pipe.h: Likewise. * libports/Makefile: Likewise. * libports/begin-rpc.c: Likewise. * libports/bucket-iterate.c: Likewise. * libports/claim-right.c: Likewise. * libports/class-iterate.c: Likewise. * libports/complete-deallocate.c: Likewise. * libports/count-bucket.c: Likewise. * libports/count-class.c: Likewise. * libports/create-bucket.c: Likewise. * libports/create-internal.c: Likewise. * libports/destroy-right.c: Likewise. * libports/enable-bucket.c: Likewise. * libports/enable-class.c: Likewise. * libports/end-rpc.c: Likewise. * libports/get-right.c: Likewise. * libports/import-port.c: Likewise. * libports/inhibit-all-rpcs.c: Likewise. * libports/inhibit-bucket-rpcs.c: Likewise. * libports/inhibit-class-rpcs.c: Likewise. * libports/inhibit-port-rpcs.c: Likewise. * libports/init.c: Likewise. * libports/interrupt-notified-rpcs.c: Likewise. * libports/interrupt-on-notify.c: Likewise. * libports/interrupt-operation.c: Likewise. * libports/interrupt-rpcs.c: Likewise. * libports/interrupted.c: Likewise. * libports/lookup-port.c: Likewise. * libports/manage-multithread.c: Likewise. * libports/no-senders.c: Likewise. * libports/port-deref-weak.c: Likewise. * libports/port-deref.c: Likewise. * libports/port-ref-weak.c: Likewise. * libports/port-ref.c: Likewise. * libports/ports.h: Likewise. * libports/reallocate-from-external.c: Likewise. * libports/reallocate-port.c: Likewise. * libports/resume-all-rpcs.c: Likewise. * libports/resume-bucket-rpcs.c: Likewise. * libports/resume-class-rpcs.c: Likewise. * libports/resume-port-rpcs.c: Likewise. * libports/stubs.c: Likewise. * libports/transfer-right.c: Likewise. * libstore/Makefile: Likewise. * libstore/gunzip.c: Likewise. * libstore/part.c: Likewise. * libstore/unzipstore.c: Likewise. * libthreads/Makefile: Likewise. * libtreefs/dir-lookup.c: Likewise. * libtreefs/fsys-getroot.c: Likewise. * libtreefs/fsys-hooks.c: Likewise. * libtreefs/fsys.c: Likewise. * libtreefs/trans-help.c: Likewise. * libtreefs/trans-start.c: Likewise. * libtreefs/treefs.h: Likewise. * libtrivfs/cntl-create.c: Likewise. * libtrivfs/dyn-classes.c: Likewise. * libtrivfs/io-reauthenticate.c: Likewise. * libtrivfs/io-restrict-auth.c: Likewise. * libtrivfs/protid-clean.c: Likewise. * libtrivfs/protid-dup.c: Likewise. * libtrivfs/trivfs.h: Likewise. * mach-defpager/Makefile: Likewise. * mach-defpager/default_pager.c: Likewise. * mach-defpager/kalloc.c: Likewise. * mach-defpager/main.c: Likewise. * nfs/Makefile: Likewise. * nfs/cache.c: Likewise. * nfs/main.c: Likewise. * nfs/mount.c: Likewise. * nfs/name-cache.c: Likewise. * nfs/nfs.h: Likewise. * nfs/ops.c: Likewise. * nfs/rpc.c: Likewise. * nfsd/Makefile: Likewise. * nfsd/cache.c: Likewise. * nfsd/loop.c: Likewise. * nfsd/main.c: Likewise. * nfsd/nfsd.h: Likewise. * pfinet/Makefile: Likewise. * pfinet/ethernet.c: Likewise. * pfinet/glue-include/asm/spinlock.h: Likewise. * pfinet/glue-include/linux/interrupt.h: Likewise. * pfinet/glue-include/linux/sched.h: Likewise. * pfinet/glue-include/linux/timer.h: Likewise. * pfinet/glue-include/linux/wait.h: Likewise. * pfinet/iioctl-ops.c: Likewise. * pfinet/io-ops.c: Likewise. * pfinet/kmem_cache.c: Likewise. * pfinet/main.c: Likewise. * pfinet/options.c: Likewise. * pfinet/pfinet-ops.c: Likewise. * pfinet/pfinet.h: Likewise. * pfinet/sched.c: Likewise. * pfinet/socket-ops.c: Likewise. * pfinet/socket.c: Likewise. * pfinet/timer-emul.c: Likewise. * pfinet/tunnel.c: Likewise. * pflocal/Makefile: Likewise. * pflocal/connq.c: Likewise. * pflocal/io.c: Likewise. * pflocal/sock.c: Likewise. * pflocal/sock.h: Likewise. * pflocal/socket.c: Likewise. * pflocal/sserver.c: Likewise. * proc/Makefile: Likewise. * proc/info.c: Likewise. * proc/main.c: Likewise. * proc/mgt.c: Likewise. * proc/msg.c: Likewise. * proc/proc.h: Likewise. * proc/stubs.c: Likewise. * proc/wait.c: Likewise. * storeio/Makefile: Likewise. * storeio/dev.c: Likewise. * storeio/dev.h: Likewise. * storeio/open.c: Likewise. * storeio/open.h: Likewise. * storeio/pager.c: Likewise. * storeio/storeio.c: Likewise. * term/Makefile: Likewise. * term/devio.c: Likewise. * term/hurdio.c: Likewise. * term/main.c: Likewise. * term/munge.c: Likewise. * term/ptyio.c: Likewise. * term/term.h: Likewise. * term/users.c: Likewise. * tmpfs/Makefile: Likewise. * tmpfs/dir.c: Likewise. * tmpfs/node.c: Likewise. * tmpfs/tmpfs.c: Likewise. * tmpfs/tmpfs.h: Likewise. * trans/Makefile: Likewise. * trans/fakeroot.c: Likewise. * trans/fifo.c: Likewise. * trans/hello-mt.c: Likewise. * trans/new-fifo.c: Likewise. * trans/streamio.c: Likewise. * ufs/Makefile: Likewise. * ufs/alloc.c: Likewise. * ufs/dir.c: Likewise. * ufs/hyper.c: Likewise. * ufs/inode.c: Likewise. * ufs/main.c: Likewise. * ufs/pager.c: Likewise. * ufs/pokeloc.c: Likewise. * ufs/sizes.c: Likewise. * ufs/ufs.h: Likewise. * usermux/Makefile: Likewise. * usermux/mux.c: Likewise. * usermux/node.c: Likewise. * usermux/usermux.h: Likewise. * utils/Makefile: Likewise. * utils/fakeauth.c: Likewise. * utils/rpctrace.c: Likewise. --- libpipe/Makefile | 3 ++- libpipe/pipe.c | 76 ++++++++++++++++++++++++++++---------------------------- libpipe/pipe.h | 40 ++++++++++++++--------------- 3 files changed, 60 insertions(+), 59 deletions(-) (limited to 'libpipe') diff --git a/libpipe/Makefile b/libpipe/Makefile index a7625d6c..35e27adf 100644 --- a/libpipe/Makefile +++ b/libpipe/Makefile @@ -25,7 +25,8 @@ installhdrs = pipe.h pq.h SRCS = pq.c dgram.c pipe.c stream.c seqpack.c addr.c pq-funcs.c pipe-funcs.c OBJS = $(SRCS:.c=.o) -HURDLIBS=threads ports +HURDLIBS= ports +LDLIBS += -lpthread include ../Makeconf diff --git a/libpipe/pipe.c b/libpipe/pipe.c index 85aac0e6..dd306f60 100644 --- a/libpipe/pipe.c +++ b/libpipe/pipe.c @@ -35,7 +35,7 @@ timestamp (time_value_t *stamp) } /* Hold this lock before attempting to lock multiple pipes. */ -struct mutex pipe_multiple_lock = MUTEX_INITIALIZER; +pthread_mutex_t pipe_multiple_lock = PTHREAD_MUTEX_INITIALIZER; /* ---------------------------------------------------------------- */ @@ -60,12 +60,12 @@ pipe_create (struct pipe_class *class, struct pipe **pipe) bzero (&new->read_time, sizeof (new->read_time)); bzero (&new->write_time, sizeof (new->write_time)); - condition_init (&new->pending_reads); - condition_init (&new->pending_read_selects); - condition_init (&new->pending_writes); - condition_init (&new->pending_write_selects); + pthread_cond_init (&new->pending_reads, NULL); + pthread_cond_init (&new->pending_read_selects, NULL); + pthread_cond_init (&new->pending_writes, NULL); + pthread_cond_init (&new->pending_write_selects, NULL); new->pending_selects = NULL; - mutex_init (&new->lock); + pthread_mutex_init (&new->lock, NULL); pq_create (&new->queue); @@ -135,7 +135,7 @@ pipe_select_cond_broadcast (struct pipe *pipe) do { - condition_broadcast (&cond->cond); + pthread_cond_broadcast (&cond->cond); cond = cond->next; } while (cond != last); @@ -169,12 +169,12 @@ void _pipe_no_readers (struct pipe *pipe) if (pipe->writers) /* Wake up writers for the bad news... */ { - condition_broadcast (&pipe->pending_writes); - condition_broadcast (&pipe->pending_write_selects); + pthread_cond_broadcast (&pipe->pending_writes); + pthread_cond_broadcast (&pipe->pending_write_selects); pipe_select_cond_broadcast (pipe); } } - mutex_unlock (&pipe->lock); + pthread_mutex_unlock (&pipe->lock); } } @@ -192,12 +192,12 @@ void _pipe_no_writers (struct pipe *pipe) if (pipe->readers) /* Wake up readers for the bad news... */ { - condition_broadcast (&pipe->pending_reads); - condition_broadcast (&pipe->pending_read_selects); + pthread_cond_broadcast (&pipe->pending_reads); + pthread_cond_broadcast (&pipe->pending_read_selects); pipe_select_cond_broadcast (pipe); } } - mutex_unlock (&pipe->lock); + pthread_mutex_unlock (&pipe->lock); } } @@ -217,15 +217,15 @@ pipe_pair_select (struct pipe *rpipe, struct pipe *wpipe, if (*select_type == SELECT_READ) { - mutex_lock (&rpipe->lock); + pthread_mutex_lock (&rpipe->lock); err = pipe_select_readable (rpipe, data_only); - mutex_unlock (&rpipe->lock); + pthread_mutex_unlock (&rpipe->lock); } else if (*select_type == SELECT_WRITE) { - mutex_lock (&wpipe->lock); + pthread_mutex_lock (&wpipe->lock); err = pipe_select_writable (wpipe); - mutex_unlock (&wpipe->lock); + pthread_mutex_unlock (&wpipe->lock); } else /* ugh */ @@ -233,18 +233,18 @@ pipe_pair_select (struct pipe *rpipe, struct pipe *wpipe, int rpipe_blocked, wpipe_blocked; struct pipe_select_cond pending_select; size_t wlimit = wpipe->write_limit; - struct mutex *lock = + pthread_mutex_t *lock = (wpipe == rpipe ? &rpipe->lock : &pipe_multiple_lock); - condition_init (&pending_select.cond); + pthread_cond_init (&pending_select.cond, NULL); - mutex_lock (lock); + pthread_mutex_lock (lock); if (rpipe == wpipe) pipe_add_select_cond (rpipe, &pending_select); else { - mutex_lock (&rpipe->lock); - mutex_lock (&wpipe->lock); + pthread_mutex_lock (&rpipe->lock); + pthread_mutex_lock (&wpipe->lock); pipe_add_select_cond (rpipe, &pending_select); pipe_add_select_cond (wpipe, &pending_select); } @@ -257,15 +257,15 @@ pipe_pair_select (struct pipe *rpipe, struct pipe *wpipe, { if (rpipe != wpipe) { - mutex_unlock (&rpipe->lock); - mutex_unlock (&wpipe->lock); + pthread_mutex_unlock (&rpipe->lock); + pthread_mutex_unlock (&wpipe->lock); } - if (hurd_condition_wait (&pending_select.cond, lock)) + if (pthread_hurd_cond_wait_np (&pending_select.cond, lock)) err = EINTR; if (rpipe != wpipe) { - mutex_lock (&rpipe->lock); - mutex_lock (&wpipe->lock); + pthread_mutex_lock (&rpipe->lock); + pthread_mutex_lock (&wpipe->lock); } rpipe_blocked = ! ((rpipe->flags & PIPE_BROKEN) @@ -289,10 +289,10 @@ pipe_pair_select (struct pipe *rpipe, struct pipe *wpipe, { pipe_remove_select_cond (rpipe, &pending_select); pipe_remove_select_cond (wpipe, &pending_select); - mutex_unlock (&rpipe->lock); - mutex_unlock (&wpipe->lock); + pthread_mutex_unlock (&rpipe->lock); + pthread_mutex_unlock (&wpipe->lock); } - mutex_unlock (lock); + pthread_mutex_unlock (lock); } return err; @@ -357,14 +357,14 @@ pipe_send (struct pipe *pipe, int noblock, void *source, timestamp (&pipe->write_time); /* And wakeup anyone that might be interested in it. */ - condition_broadcast (&pipe->pending_reads); - mutex_unlock (&pipe->lock); + pthread_cond_broadcast (&pipe->pending_reads); + pthread_mutex_unlock (&pipe->lock); - mutex_lock (&pipe->lock); /* Get back the lock on PIPE. */ + pthread_mutex_lock (&pipe->lock); /* Get back the lock on PIPE. */ /* Only wakeup selects if there's still data available. */ if (pipe_is_readable (pipe, 0)) { - condition_broadcast (&pipe->pending_read_selects); + pthread_cond_broadcast (&pipe->pending_read_selects); pipe_select_cond_broadcast (pipe); /* We leave PIPE locked here, assuming the caller will soon unlock it and allow others access. */ @@ -459,14 +459,14 @@ pipe_recv (struct pipe *pipe, int noblock, unsigned *flags, void **source, timestamp (&pipe->read_time); /* And wakeup anyone that might be interested in it. */ - condition_broadcast (&pipe->pending_writes); - mutex_unlock (&pipe->lock); + pthread_cond_broadcast (&pipe->pending_writes); + pthread_mutex_unlock (&pipe->lock); - mutex_lock (&pipe->lock); /* Get back the lock on PIPE. */ + pthread_mutex_lock (&pipe->lock); /* Get back the lock on PIPE. */ /* Only wakeup selects if there's still writing space available. */ if (pipe_readable (pipe, 1) < pipe->write_limit) { - condition_broadcast (&pipe->pending_write_selects); + pthread_cond_broadcast (&pipe->pending_write_selects); pipe_select_cond_broadcast (pipe); /* We leave PIPE locked here, assuming the caller will soon unlock it and allow others access. */ diff --git a/libpipe/pipe.h b/libpipe/pipe.h index a3590fc4..b8e70681 100644 --- a/libpipe/pipe.h +++ b/libpipe/pipe.h @@ -23,7 +23,7 @@ #define EWOULDBLOCK EAGAIN /* XXX */ -#include /* For conditions & mutexes */ +#include /* For conditions & mutexes */ #include #ifdef PIPE_DEFINE_EI @@ -66,7 +66,7 @@ struct pipe_select_cond { struct pipe_select_cond *next; struct pipe_select_cond *prev; - struct condition cond; + pthread_cond_t cond; }; /* A unidirectional data pipe; it transfers data from READER to WRITER. */ @@ -89,11 +89,11 @@ struct pipe time_value_t read_time; time_value_t write_time; - struct condition pending_reads; - struct condition pending_read_selects; + pthread_cond_t pending_reads; + pthread_cond_t pending_read_selects; - struct condition pending_writes; - struct condition pending_write_selects; + pthread_cond_t pending_writes; + pthread_cond_t pending_write_selects; struct pipe_select_cond *pending_selects; @@ -104,7 +104,7 @@ struct pipe /* Write requests of less than this much are always done atomically. */ size_t write_atomic; - struct mutex lock; + pthread_mutex_t lock; /* A queue of incoming packets, of type either PACKET_TYPE_DATA or PACKET_TYPE_CONTROL. Each data packet represents one datagram for @@ -177,7 +177,7 @@ pipe_wait_readable (struct pipe *pipe, int noblock, int data_only) { if (noblock) return EWOULDBLOCK; - if (hurd_condition_wait (&pipe->pending_reads, &pipe->lock)) + if (pthread_hurd_cond_wait_np (&pipe->pending_reads, &pipe->lock)) return EINTR; } return 0; @@ -191,7 +191,7 @@ PIPE_EI error_t pipe_select_readable (struct pipe *pipe, int data_only) { while (! pipe_is_readable (pipe, data_only) && ! (pipe->flags & PIPE_BROKEN)) - if (hurd_condition_wait (&pipe->pending_read_selects, &pipe->lock)) + if (pthread_hurd_cond_wait_np (&pipe->pending_read_selects, &pipe->lock)) return EINTR; return 0; } @@ -209,7 +209,7 @@ pipe_wait_writable (struct pipe *pipe, int noblock) { if (noblock) return EWOULDBLOCK; - if (hurd_condition_wait (&pipe->pending_writes, &pipe->lock)) + if (pthread_hurd_cond_wait_np (&pipe->pending_writes, &pipe->lock)) return EINTR; if (pipe->flags & PIPE_BROKEN) return EPIPE; @@ -225,7 +225,7 @@ pipe_select_writable (struct pipe *pipe) { size_t limit = pipe->write_limit; while (! (pipe->flags & PIPE_BROKEN) && pipe_readable (pipe, 1) >= limit) - if (hurd_condition_wait (&pipe->pending_writes, &pipe->lock)) + if (pthread_hurd_cond_wait_np (&pipe->pending_writes, &pipe->lock)) return EINTR; return 0; } @@ -276,7 +276,7 @@ extern void pipe_drain (struct pipe *pipe); PIPE_EI void pipe_acquire_reader (struct pipe *pipe) { - mutex_lock (&pipe->lock); + pthread_mutex_lock (&pipe->lock); if (pipe->readers++ == 0) _pipe_first_reader (pipe); } @@ -285,7 +285,7 @@ pipe_acquire_reader (struct pipe *pipe) PIPE_EI void pipe_acquire_writer (struct pipe *pipe) { - mutex_lock (&pipe->lock); + pthread_mutex_lock (&pipe->lock); if (pipe->writers++ == 0) _pipe_first_writer (pipe); } @@ -298,7 +298,7 @@ pipe_release_reader (struct pipe *pipe) if (--pipe->readers == 0) _pipe_no_readers (pipe); else - mutex_unlock (&pipe->lock); + pthread_mutex_unlock (&pipe->lock); } /* Decrement PIPE's (which should be locked) writer count and unlock it. If @@ -309,7 +309,7 @@ pipe_release_writer (struct pipe *pipe) if (--pipe->writers == 0) _pipe_no_writers (pipe); else - mutex_unlock (&pipe->lock); + pthread_mutex_unlock (&pipe->lock); } /* Increment PIPE's reader count. PIPE should be unlocked. */ @@ -317,7 +317,7 @@ PIPE_EI void pipe_add_reader (struct pipe *pipe) { pipe_acquire_reader (pipe); - mutex_unlock (&pipe->lock); + pthread_mutex_unlock (&pipe->lock); } /* Increment PIPE's writer count. PIPE should be unlocked. */ @@ -325,7 +325,7 @@ PIPE_EI void pipe_add_writer (struct pipe *pipe) { pipe_acquire_writer (pipe); - mutex_unlock (&pipe->lock); + pthread_mutex_unlock (&pipe->lock); } /* Decrement PIPE's (which should be unlocked) reader count and unlock it. If @@ -333,7 +333,7 @@ pipe_add_writer (struct pipe *pipe) PIPE_EI void pipe_remove_reader (struct pipe *pipe) { - mutex_lock (&pipe->lock); + pthread_mutex_lock (&pipe->lock); pipe_release_reader (pipe); } @@ -342,7 +342,7 @@ pipe_remove_reader (struct pipe *pipe) PIPE_EI void pipe_remove_writer (struct pipe *pipe) { - mutex_lock (&pipe->lock); + pthread_mutex_lock (&pipe->lock); pipe_release_writer (pipe); } @@ -410,7 +410,7 @@ error_t pipe_recv (struct pipe *pipe, int noblock, unsigned *flags, pipe_recv (pipe, noblock, 0, source, data, data_len, amount, 0,0,0,0) /* Hold this lock before attempting to lock multiple pipes. */ -extern struct mutex pipe_multiple_lock; +extern pthread_mutex_t pipe_multiple_lock; /* Return when either RPIPE is available for reading (if SELECT_READ is set in *SELECT_TYPE), or WPIPE is available for writing (if select_write is -- cgit v1.2.3