The per-heap locks are reinitialized already by the routine which
invokes this one, but this global lock was previously missed.
May fix a deadlock reported by trungnt2910 to happen in the .NET port.
* If we received a wait status, always return with it.
* Only count those entries for which we set the wait-status as
having been notified.
In conjunction with the prior commit, this fixes some rare deadlocks
that could occur with timeouts or signals.
It turns out this code actually is possible to trigger, e.g. using
Git checkouts, where EINTR due to signals happens quite often.
However, even with this commit, it still does not work quite right,
due to an oversight in condition-variable notify accounting. That
will be addressed in the next commit.
Once B_EVENT_INVALID has been set, the select routine is free to
delete the select_info at any time. We therefore cannot access
the "next" pointer after notify_select_events returns.
May fix a KDL seen by trungnt2910.
The dequeue routine expects that if B_EVENT_INVALID is set,
it is free to delete the object. So we must only set it with
the lock held, so that by the time the dequeue routine sees it,
we will be done with the event.
This commit replaces the custom implementation of message passing with
BLooper.
This commit does not fully transition the code to the BLooper paradigm.
WaitForEvent still exists, when, ideally, message passing should be
used to notify the waiting class that the results are ready.
Change-Id: Id223b9fc0ac1aa9a5a5aeb4af63da04f2cc7574b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6400
Reviewed-by: John Scipione <jscipione@gmail.com>
Reviewed-by: Rene Gollent <rene@gollent.com>
1. Set fShutdownRead & fShutdownWrite. This is necessary
because in Send(), there is a lock-unlock dance between the
source and target sockets which could potentially race with
some other thread closing the socket. The "shutdown" state
is checked before actually writing, and so we need to set it
here. Otherwise, the other thread could allocate a new receive
FIFO for us, which we do not want.
2. Don't return early when unbinding, but only if there's an
error (there shouldn't be.)
3. Merely ASSERT() in Free() that closing was already done
and nothing remains to be deallocated.
Should fix#18535.
unix_dgram_test still passes.
When the select/deselect API consumers invoke deselect(), they
expect that when this function returns, no further references to
the select_infos will remain and they can be safely deleted.
In order for that to be true, we cannot remove the select_infos from
the list in one step and deselect them in another; we must do both
without releasing the lock in the middle.
Should hopefully fix a rare KDL seen while testing .NET and
the new event_queue.
* Check fFirst/fLast instead of previous/next. Avoids
list corruption when trying to remove already-removed
elements, instead will cause null-dereference KDL.
* Always set next/previous to NULL even when DEBUG is not
enabled.
- Follow POSIX recommendations (even if other parts of the output don't match)
- If the mountpoint path is long, don't shift the other columns
Change-Id: I0ebfa2d6dca34792da8c3a26d996271298e0e65a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6380
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Report connected status to the socket module. Otherwise, operations
like `getpeername` would not work correctly.
Fixes#18534.
Change-Id: I99d047f0d7b4d442cc2b3ea9222b0d89d216c1ae
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6719
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
This is now updated for the modern k8s infrastructure.
Change-Id: Ib468eb0bdf4b0746c3f5d8692d9353d0cd9e923a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6768
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
The values come from XHCI table 5-27.
PS_PLS_MASK is the same as PORT_STATUS_SS_LINK_STATE.
Change-Id: Ie54abcda0c33738fe7dc5caa4e4f3abae3b40adc
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6488
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
It was suggested for translations in Pootle, and I agree it looks
subtly nicer: a bit smaller and vertically centered.
Also made all strings that include the "x" translatable, in case
there are different local usages.
For icon sizes in Tracker, move menu creation into a loop with an
kIconSizes array holding the pixel dimensions.
Change-Id: I805279d7186d90a13a40b4d4495670cdfac18913
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6765
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
When there are a lot of display resolutions available, the menu can
become very high. Switch to a "matrix" menu with 3 columns in this case
to keep it a reasonable size.
Change-Id: I826be06a91bd1bcae600cc333e34d4a9dd7b3df5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5320
Reviewed-by: nephele nephele <nep-git@packageloss.eu>
Reviewed-by: John Scipione <jscipione@gmail.com>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
This warning happens on Haiku because we don't have DT_DIR and the
dt_type field in dirent. The FreeBSD code has a partial ifdef for that,
but it is missing in some places, leading to an unused but set variable.
Completely disable the variable when DT_DIR is missing.
Change-Id: I274799b0d25e2df27758fcf4452567879aed8e10
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6764
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Notable changes include:
* fts: Stat things relative to the directory fd, if possible.
* fts: Fix double-free with conflicting concurrent modifications.
* fts: Don't abort if an empty pathname is given.
* fts: Don't return FTS_SLNONE if it's not a symlink (if race).
* fts_children: preserve errno after running close/fchdir
* Use ANSI C prototypes. Eliminates -Wold-style-definition warnings.
* fts: Fix a potential memory leak in error case
* libc: Check for readdir(2) errors in fts(3)
Used for tracing only, so mark them as unused when tracing is disabled.
Change-Id: I76acb0f18ccab12512eaa4b2644e9d57c591b9ef
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6740
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
Declare the variables as unused because they are used only in ASSERT
calls which are disabled by default.
Change-Id: I4786fad54463b532b00afa5be00ed52fb118776f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6737
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
The "longNameValid" variable already indicates if a long name is present and
valid, and it is correctly handled, with the short name used as a fallback
if the long name is either not present, or not encoded correctly.
The "hasLongName" variable is useless since long names are already handled.
The "partial" variable indeed indicates a partial read was done. There is
nothing to do with that info, the read is already complete at this point and
the correct data is read and returned to the caller. So I don't see why we
should keep this variable.
The "count" variable seems to serve no purpose and is easy to re-add if
someone ever has a need for it.
Change-Id: Ic7eb7f34a49243ecdb5dd3c6b29c3b90f3bece10
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6739
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
It only supports file descriptors and processes (threads),
and a few flags (not all) to go with them.
This has been tested extensively against libuv.
Change-Id: I6fc5930fa7273698172c9c695965842b5df44f03
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6746
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Based on hamishm's original patch from 2015, but heavily modified,
refactored, and reworked.
From the original commit message:
> When an object is deleted, a B_EVENT_INVALID event is delivered,
> and the object is unregistered from the queue.
>
> The special event flag B_EVENT_ONE_SHOT can be passed in when adding
> an object so that the object is automatically unregistered when an
> event is delivered.
Modifications to the original change include:
* Removed the public interface (syscalls remain private for the moment)
* Event list queueing/dequeueing almost entirely rewritten, including:
- Clear events field when dequeueing.
- Have B_EVENT_QUEUED actually indicate whether the event has been
appended to the linked list (or not), based around lock state.
The previous logic was prone to races and double-insertions.
- "Modify" is now just "Deselect + Select" performed at once;
previously it could cause use-after-frees.
- Unlock for deselect only once at the end of dequeue.
- Handle INVALID events still in the queue upon destruction,
fixing memory leaks.
* Deduplified code with wait_for_objects.
* Use of C++ virtual dispatch instead of C-style enum + function calls,
and BReferenceable plus destructors for teardown.
* Removed select/modify/delete flags. Select/Modify are now the same
operation on the syscall interface, and "Delete" is done when 0
is passed for "events". Additionally, the events selected can be fetched
by passing -1 for "events".
* Implemented level-triggered mode.
* Use of BStackOrHeapArray and other convenience routines in syscalls.
Change-Id: I1d2f094fd981c95215a59adbc087523c7bbbe40b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6745
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
This variable was introduced in hrev38573 which is the conclusion of
a GSoC project by jvff to add write support to the ext2 driver.
It has been unused for 13 years, I think it is safe to remove.
Change-Id: I8ae4635dbc39f108b769d90b92e5545f8183a10d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6715
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
Otherwise, we will deadlock.
I don't know that this has ever actually occurred; it is very unlikely
due to the write-lock acquisition before unblocking. It could only
occur if a SIGINT was delivered or timeout+wakeup occurred at just
the right moment.
- Use separate descriptor count. Queue length and descriptor count do not need to be the same.
- Assotiate cookies with descriptors, not used queue index.
- Use mask instead of modulo operator for better efficiency (queue length is always power of 2).
Change-Id: I5f053287e2a0cfad8da25053c63c42aa06fb238d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6710
Reviewed-by: waddlesplash <waddlesplash@gmail.com>