#
30d2a5e1 |
|
05-May-2023 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/fifo: just send a disconnect for readers without writers. just send an error for writers without readers Change-Id: I4808e5dec29c840b72423a1bb10cb8f0ebc23bb5 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6419 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
702e7b01 |
|
06-May-2023 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/fifo: fix commands like "tail -f file | grep" 'tail' selects read events on its write-only file descriptors, so let's use B_SELECT_READ only for read-write file descriptors. Change-Id: I5bb3837f82a7b06ec367fe871c15d67beb2d412c Reviewed-on: https://review.haiku-os.org/c/haiku/+/6417 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
06b68f46 |
|
06-Jul-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fifo: Add missing check for B_SELECT_READ in Deselect(). This should have been part of 27fda3e46f1422503a08a3d34e4618778b2dc146. Fixes #17826.
|
#
27fda3e4 |
|
29-Jun-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fifo: Properly support opening FIFOs in O_RDWR mode. While pipe() only supports a read end and a write end, named FIFOs are supposed to allow opening in read/write mode (which, indeed, is something the Fish shell seems to require.) The code that checks open_mode in the read/write routines was introduced all the way back in 2003 (2469f26dfc618dac7853c0de146df7872e60623f). At that time, the VFS did not do open_mode checks on FDs in the I/O syscalls, so these doubled as permissions checks. Now, however, the VFS does check that in common_user_io, so we can remove these entirely and let things behave as they should. Additionally, there is now also no reason to prevent select()ing on both events for the same FD independent of open_mode, so allow that too. Change-Id: Ib3cba76d18e91b7c00d1695e8d29dd47cae06b79 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5427 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
177a8012 |
|
20-Jun-2022 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel: fix trace build for fd.cpp and fifo.cpp Change-Id: I12b2e85926ae63eaba5c077343cdaa2362cf8af1 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5391 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
2a849a64 |
|
04-Nov-2020 |
Jérôme Duval <jerome.duval@gmail.com> |
fifo: fsync() returns EINVAL fix #15288 Change-Id: Ic86bcec662c81cb04b743ec077cc8a2f3941f96e Reviewed-on: https://review.haiku-os.org/c/haiku/+/3379 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
|
#
2a081b42 |
|
03-Aug-2017 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
fifo: revert broken fix
|
#
65abebfa |
|
03-Aug-2017 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
fifo: wakeup readers not checking POLLHUP/B_SELECT_DISCONNECTED For readers waiting in select() or simply in read(), B_SELECT_DISCONNECTED notification didn't wake them anymore. Now, cascade notifications to be sure to wake them, either on POLLHUP, POOLERR/B_SELECT_ERROR or, at worst, from read(). See #7859 for details.
|
#
216574f3 |
|
26-Jul-2017 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
fifo: fix #7859
|
#
6235b496 |
|
12-Jan-2015 |
Adrien Destugues <pulkomandy@gmail.com> |
More useless inclusions of khash.h
|
#
f170a888 |
|
25-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
FIFO: Handle user reads/writes more correctly * Determine whether called from userland or kernel. * Check the buffer address via IS_USER_ADDRESS(), if from userland. * Simplify things by merging UserRead() with Read() and UserWrite() with Write().
|
#
8019fdba |
|
25-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
FIFO: Implement FION{BIO,READ}, B_SET_[NON]BLOCKING_IO ioctls
|
#
fd0bfd55 |
|
25-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
FIFO: More correct locking when accessing file_cookie::open_mode
|
#
38b150a9 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Add "fifo" KDL command Prints information about a FIFO node and, optionally, its data buffer content.
|
#
fb52b1f8 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Enlarge FIFO buffer sizes * Increase FIFO buffer capacity from 32 to 64 KiB and the FIFO atomic write size ({BUF_SIZE}) from 512 bytes to 4 KiB (both like Linux). * Fix *pathconf(..., _PC_PIPE_BUF). It was returning 4 KiB although the implemented atomic write size was 512 bytes only. Now both *pathconf() and the FIFO implementation refer to the same constant.
|
#
334ae3c7 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Fix RingBuffer::Read()/Write() return types size_t -> ssize_t, since they may actually return an error code.
|
#
c8dd9f77 |
|
29-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Add thread_unblock() and use it where possible
|
#
24df6592 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ad47c011 |
|
18-Oct-2010 |
Rene Gollent <anevilyak@gmail.com> |
More fixes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39009 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dac5d7fe |
|
03-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Made sure that at least the common case with a single writer exits write() once the file descriptor is closed. * Reinstantiated the FIFO functionality as long there are no writers yet as explained by Ingo. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37883 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1ffa5029 |
|
03-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Cleanup, no functional change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37861 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
81fcd71e |
|
03-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented a different way to notify waiting read()s when a file descriptor is closed; their ReadRequest will now be notified with B_FILE_ERROR. * This is a better fix for #5947, though note that I left the changes in Inode::ReadDataFromBuffer() in place, as I think this is what POSIX requires. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37860 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
da6c1461 |
|
02-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* I see no reason for the fActive check here. Until Ingo enlightens me, this fixes bug #5947, IOW BePDF should now close fine again :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37836 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9061bf7e |
|
02-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Improved debug output. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37835 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9d570af7 |
|
24-May-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Changed the type of the "op" parameter of the fs_vnode_ops::ioctl() hook and the _kern_ioctl() syscall from ulong to uint32. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36927 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0338371f |
|
13-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* All scheduler implementations: - enqueue_in_run_queue() no longer returns whether rescheduling is supposed to happen. Instead is sets cpu_ent::invoke_scheduler on the current CPU. - reschedule() does now handle cpu_ent::invoke_scheduler_if_idle(). No need to let all callers do that. * thread_unblock[_locked]() no longer return whether rescheduling is supposed to happen. * Got rid of the B_INVOKE_SCHEDULER handling. The interrupt hooks really can't know, when it makes sense to reschedule or not. * Introduced scheduler_reschedule_if_necessary[_locked]() functions for checking+invoking the scheduler. * Some semaphore functions (e.g. delete_sem()) invoke the scheduler now, if they wake up anything with greater priority. I've also tried to add scheduler invocations in the condition variable and mutex/rw_lock code, but that actually has a negative impact on performance, probably because it causes too much ping-ponging between threads when multiple locking primitives are involved. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34657 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e50cf876 |
|
02-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the VM headers into subdirectory vm/. * Renamed vm_cache.h/vm_address_space.h to VMCache.h/VMAddressSpace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34449 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fa00207c |
|
15-Jun-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Made the internal file systems correctly handle the timespec struct stat times. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31059 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c33667d4 |
|
01-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Fixing warnings under GCC4 in preparation to enable -Werror there as well: * Replaced the use of offsetof() for structs that aren't PODs. Add a offset_of_member() macro to util/khash.h because that's what it's used for in our cases. * Change the signature of add_debugger_command()/remove_debugger_command() on GCC > 2 to avoid the depricated conversion from string constants to char *. * Adding some "suggested" parenthesis. I know that not everyone likes that, but it pointed out at least one bug that is fixed here as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29113 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d52718a5 |
|
16-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed serious race condition: If the thread waiting for a request was interrupted, another thread closing the other end of the pipe could invoke thread_unblock() while the first thread already entered mutex_lock(). This would make the first thread think it successfully locked the mutex, without removing its (on-stack) wait entry from the mutex queue, thus leading to crashes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28195 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ec598fe4 |
|
27-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added FS interface hooks io() and cancel_io(). The former is supposed to provide asynchrounous (or only synchronous, if asynchronous is not supported) I/O request support. It will eventually replace {read,write}_pages(). None of the FS implementations implement them yet. * Implemented some support functions for request-based I/O. File system implementations can use do_fd_io() which passes an I/O request to the layer responsible for a given FD, and do_iterative_fd_io(), which translates a request for a file to subrequests for the underlying device and passes them on. Both fall back to synchrounous processing when the io() hook is not supported. Furthermore added vfs_synchronous_io() which should be handy for the devfs to perform io_requests synchronously for devices that don't support the io() hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26655 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e6bd90c5 |
|
23-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* bfs_fsync() was the only place which could cause the fs_vnode_ops::write_pages() to be called with fsReenter = true. Since this is no longer the case, the argument has become superfluous. For read_pages() it always was. Removed the argument from the functions and all functions that propagated it. * Some whitespace at the end of lines was removed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26579 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fbe0c27a |
|
17-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: Changed condition variables so that it is allowed to block (e.g. lock mutexes etc.) between Add() and Wait(). This fixes #2059, since the block writer used them this way and could thusly fail to wait for a condition variable, causing a temporary stack object to be used past its lifetime. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25525 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
adf376c9 |
|
08-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced benaphores with mutexes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24280972 |
|
29-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed superfluous uint32 ref parameter from select() FS hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25268 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
71a49db6 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Use the thread blocking functions instead of a condition variable for read request. Can probably be done for writers as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25111 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6cef245e |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Detemplatized ConditionVariable{Entry}. Merged them with their respective Private* base class. * Changed sigwait() and sigsuspend() to use thread_block() instead of a condition variable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25100 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b95f6d47 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced a set of functions (thread_prepare_to_block(), thread_block(), thread_unblock(),...) that allow a thread to wait for something without needing a semaphore or condition variable. It can simply block and another thread can unblock it. Supports timeouts and interrupting. Both semaphores and condition variables use this common mechanism, now. * Semaphores: - Some simplifications due to the thread blocking mechanism. - Changed locking order to sem -> thread. It was the other way around before and when introducing the wait_for_objects() support I had also introduced a situation where the locking was reverse, which could potentially cause a dead lock on SMP systems. - Instead of queueing thread structures, a semaphore queues queued_thread entries now, which are created on the stack. The thread::sem structure could thus be removed. - Added sem_entry::net_count, which is sem_entry::count plus the acquisition count of all waiting threads. This number is needed in remove_thread_from_sem() and instead of computing it there we maintain it. - Fixed remove_thread_from_sem(). It would not unblock threads, if the sem count was <= 0. - Made sem::last_acquirer unconditional. It is actually needed for sem_info::latest_holder. Fixed fill_sem_info() accordingly. - Added some optional tracing output, though only via ktrace_printf(). * Condition variables: - Could be simplified significantly through the use of the thread blocking mechanism. Removed a good deal of unnecessary code. - Moved the ConditionVariableEntry "flags" parameter from Wait() to Add(), and adjusted all places where condition variables are used accordingly. * snooze() uses thread_block_with_timeout() instead of a semaphore. * Simplified thread interrupting in the signal and user debugger code. Instead of separate functions for threads waiting on a semaphore or condititon variable, we only have a single thread_interrupt(), now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25099 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
25eb8cd7 |
|
06-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed pipefs.cpp to fifo.cpp. * Removed the pipefs functionality. We only need to support FIFO nodes. * Renamed the remaining pipefs_*() functions to fifo_*(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24834 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6235b4967bb0a99752efd18eee62a47834c79946 |
|
12-Jan-2015 |
Adrien Destugues <pulkomandy@gmail.com> |
More useless inclusions of khash.h
|
#
f170a888c26756f2a2586630aa280d8bc3d687ee |
|
25-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
FIFO: Handle user reads/writes more correctly * Determine whether called from userland or kernel. * Check the buffer address via IS_USER_ADDRESS(), if from userland. * Simplify things by merging UserRead() with Read() and UserWrite() with Write().
|
#
8019fdbab89c0b320e8f70583182eae2189bc913 |
|
25-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
FIFO: Implement FION{BIO,READ}, B_SET_[NON]BLOCKING_IO ioctls
|
#
fd0bfd5593f3abb48b1038112d7d85bbb1f4094c |
|
25-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
FIFO: More correct locking when accessing file_cookie::open_mode
|
#
38b150a9de3b51a7b9de6e6e85c066b57d43fc06 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Add "fifo" KDL command Prints information about a FIFO node and, optionally, its data buffer content.
|
#
fb52b1f8b4be971f708d17b2ad2454120cd46d81 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Enlarge FIFO buffer sizes * Increase FIFO buffer capacity from 32 to 64 KiB and the FIFO atomic write size ({BUF_SIZE}) from 512 bytes to 4 KiB (both like Linux). * Fix *pathconf(..., _PC_PIPE_BUF). It was returning 4 KiB although the implemented atomic write size was 512 bytes only. Now both *pathconf() and the FIFO implementation refer to the same constant.
|
#
334ae3c73b127d806131a45482b0c55d6ab1cae8 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Fix RingBuffer::Read()/Write() return types size_t -> ssize_t, since they may actually return an error code.
|
#
c8dd9f7780c426e592a3ccb231e6bfab51f15eb9 |
|
29-Oct-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
kernel: Add thread_unblock() and use it where possible
|
#
24df65921befcd0ad0c5c7866118f922da61cb96 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d80c86e19e2610e7444a4fcefe3e0f8e6 |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ad47c011b84cd492df9b750ffc7c19c87a7392f7 |
|
18-Oct-2010 |
Rene Gollent <anevilyak@gmail.com> |
More fixes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39009 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dac5d7fe4f7192805e405fe05a11a60ac30c800e |
|
03-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Made sure that at least the common case with a single writer exits write() once the file descriptor is closed. * Reinstantiated the FIFO functionality as long there are no writers yet as explained by Ingo. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37883 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1ffa5029646007e9381a0b423eead1cc87c156c7 |
|
03-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Cleanup, no functional change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37861 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
81fcd71e3a7f08b00b504f6edea06926cd74f0e2 |
|
03-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented a different way to notify waiting read()s when a file descriptor is closed; their ReadRequest will now be notified with B_FILE_ERROR. * This is a better fix for #5947, though note that I left the changes in Inode::ReadDataFromBuffer() in place, as I think this is what POSIX requires. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37860 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
da6c14611bff9bfe877a10f32c95d3aa30a2fe92 |
|
02-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* I see no reason for the fActive check here. Until Ingo enlightens me, this fixes bug #5947, IOW BePDF should now close fine again :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37836 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9061bf7e800eeeada14d3da9488e1fde098d403d |
|
02-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Improved debug output. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37835 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9d570af7c878ba30043b23e6dce5f3ae5578aa7c |
|
24-May-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Changed the type of the "op" parameter of the fs_vnode_ops::ioctl() hook and the _kern_ioctl() syscall from ulong to uint32. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36927 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0338371f26864c2a248b1ea53b9fe78c884af7f2 |
|
13-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* All scheduler implementations: - enqueue_in_run_queue() no longer returns whether rescheduling is supposed to happen. Instead is sets cpu_ent::invoke_scheduler on the current CPU. - reschedule() does now handle cpu_ent::invoke_scheduler_if_idle(). No need to let all callers do that. * thread_unblock[_locked]() no longer return whether rescheduling is supposed to happen. * Got rid of the B_INVOKE_SCHEDULER handling. The interrupt hooks really can't know, when it makes sense to reschedule or not. * Introduced scheduler_reschedule_if_necessary[_locked]() functions for checking+invoking the scheduler. * Some semaphore functions (e.g. delete_sem()) invoke the scheduler now, if they wake up anything with greater priority. I've also tried to add scheduler invocations in the condition variable and mutex/rw_lock code, but that actually has a negative impact on performance, probably because it causes too much ping-ponging between threads when multiple locking primitives are involved. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34657 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e50cf8765be50a7454c9488db38b638cf90805af |
|
02-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the VM headers into subdirectory vm/. * Renamed vm_cache.h/vm_address_space.h to VMCache.h/VMAddressSpace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34449 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fa00207c50d24a0c867ec4123c351f85256fcbbf |
|
15-Jun-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Made the internal file systems correctly handle the timespec struct stat times. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31059 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c33667d400856680a8e0122300861eda77d1847a |
|
01-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Fixing warnings under GCC4 in preparation to enable -Werror there as well: * Replaced the use of offsetof() for structs that aren't PODs. Add a offset_of_member() macro to util/khash.h because that's what it's used for in our cases. * Change the signature of add_debugger_command()/remove_debugger_command() on GCC > 2 to avoid the depricated conversion from string constants to char *. * Adding some "suggested" parenthesis. I know that not everyone likes that, but it pointed out at least one bug that is fixed here as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29113 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d52718a5f80de8a8b7813936e7a9078c56b6bbc7 |
|
16-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed serious race condition: If the thread waiting for a request was interrupted, another thread closing the other end of the pipe could invoke thread_unblock() while the first thread already entered mutex_lock(). This would make the first thread think it successfully locked the mutex, without removing its (on-stack) wait entry from the mutex queue, thus leading to crashes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28195 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ec598fe493579e3d522453cb407ca3c6b57d715a |
|
27-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added FS interface hooks io() and cancel_io(). The former is supposed to provide asynchrounous (or only synchronous, if asynchronous is not supported) I/O request support. It will eventually replace {read,write}_pages(). None of the FS implementations implement them yet. * Implemented some support functions for request-based I/O. File system implementations can use do_fd_io() which passes an I/O request to the layer responsible for a given FD, and do_iterative_fd_io(), which translates a request for a file to subrequests for the underlying device and passes them on. Both fall back to synchrounous processing when the io() hook is not supported. Furthermore added vfs_synchronous_io() which should be handy for the devfs to perform io_requests synchronously for devices that don't support the io() hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26655 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e6bd90c58dbae64f3b464edcff90dcb06e63a716 |
|
23-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* bfs_fsync() was the only place which could cause the fs_vnode_ops::write_pages() to be called with fsReenter = true. Since this is no longer the case, the argument has become superfluous. For read_pages() it always was. Removed the argument from the functions and all functions that propagated it. * Some whitespace at the end of lines was removed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26579 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fbe0c27a94fff9dff7c42e12ee96f789b314c746 |
|
17-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: Changed condition variables so that it is allowed to block (e.g. lock mutexes etc.) between Add() and Wait(). This fixes #2059, since the block writer used them this way and could thusly fail to wait for a condition variable, causing a temporary stack object to be used past its lifetime. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25525 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
adf376c941e3af8381aa890be77a2c6f66795639 |
|
08-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced benaphores with mutexes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24280972976f3e70bd4357b646a3647e1c4fa131 |
|
29-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed superfluous uint32 ref parameter from select() FS hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25268 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
71a49db6b6eb0624d7a67a227e8d34f51d2a314a |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Use the thread blocking functions instead of a condition variable for read request. Can probably be done for writers as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25111 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6cef245eca821584f07f5a13558f51ec586852e8 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Detemplatized ConditionVariable{Entry}. Merged them with their respective Private* base class. * Changed sigwait() and sigsuspend() to use thread_block() instead of a condition variable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25100 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b95f6d4710855a27bec41b6fae2b064347780173 |
|
22-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced a set of functions (thread_prepare_to_block(), thread_block(), thread_unblock(),...) that allow a thread to wait for something without needing a semaphore or condition variable. It can simply block and another thread can unblock it. Supports timeouts and interrupting. Both semaphores and condition variables use this common mechanism, now. * Semaphores: - Some simplifications due to the thread blocking mechanism. - Changed locking order to sem -> thread. It was the other way around before and when introducing the wait_for_objects() support I had also introduced a situation where the locking was reverse, which could potentially cause a dead lock on SMP systems. - Instead of queueing thread structures, a semaphore queues queued_thread entries now, which are created on the stack. The thread::sem structure could thus be removed. - Added sem_entry::net_count, which is sem_entry::count plus the acquisition count of all waiting threads. This number is needed in remove_thread_from_sem() and instead of computing it there we maintain it. - Fixed remove_thread_from_sem(). It would not unblock threads, if the sem count was <= 0. - Made sem::last_acquirer unconditional. It is actually needed for sem_info::latest_holder. Fixed fill_sem_info() accordingly. - Added some optional tracing output, though only via ktrace_printf(). * Condition variables: - Could be simplified significantly through the use of the thread blocking mechanism. Removed a good deal of unnecessary code. - Moved the ConditionVariableEntry "flags" parameter from Wait() to Add(), and adjusted all places where condition variables are used accordingly. * snooze() uses thread_block_with_timeout() instead of a semaphore. * Simplified thread interrupting in the signal and user debugger code. Instead of separate functions for threads waiting on a semaphore or condititon variable, we only have a single thread_interrupt(), now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25099 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
25eb8cd717a56613da266823896dfb7d898b0088 |
|
06-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed pipefs.cpp to fifo.cpp. * Removed the pipefs functionality. We only need to support FIFO nodes. * Renamed the remaining pipefs_*() functions to fifo_*(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24834 a95241bf-73f2-0310-859d-f6bbb57e9c96
|