not necessary, since the VFS makes sure (or should at least) that all
events are deselected when close() is called. ~0 isn't a valid event
anyway.
* Removed delete_select_sync_pool() in socket_free(). It's not
necessary, since the select_sync_pool is auto-destroyed when the last
event has been deselected (which the VFS should take care of).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25265 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Made the pointers const.
* Changed how the ARP module maintains its arp_entry::request_buffer: it
now uses the atomic_pointer*() functions to make sure there is no race
condition, and it's deleted only once.
* Getting an ARP entry would return uninitialized data, if the entry hadn't
been resolved yet.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25263 a95241bf-73f2-0310-859d-f6bbb57e9c96
responsibility never to call notify_select_event() after deselect().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25262 a95241bf-73f2-0310-859d-f6bbb57e9c96
64-bit safe version of atomic_test_and_set() for pointers:
atomic_pointer_test_and_set().
* The VFS is now using this function (it's not used anywhere else in the
kernel this way).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25260 a95241bf-73f2-0310-859d-f6bbb57e9c96
although it put the freed space in the free list. Alternating
invocations of alloc_...() and free_...() would thus increase the
header space unboundedly.
* Unified the way a data_header and data_node access the header space.
Originally data_header::data_space and data_node::header_space had to
be kept in sync, which some functions failed to do. Introduced a
header_space structure, which is located in data_header and referenced
by data_node, so that accessing it either way does always keep both
structures in sync.
* Removed the special handling for the data node created with a buffer.
Since remove_{header,trailer}() and trim() could remove it without
knowing, the last reference to the first data header would be freed
prematurely, causing operations on freed memory, and in the end a
second free which screwed the object cache's free list. This crashed
Haiku e.g. when running OpenSSH's "forwarding" test. Now the first
created node is just a node like any other. It's allocated in the data
header, too.
* Changed the mechanism how data nodes are allocated. Now they will
always be allocated on a header associated with the buffer for which
they are created. This fixes a race condition when freeing them. They
would otherwise modify the free list of a header which might be
accessed by another thread at the same time (added a TODO explaining
how the old code could possibly be fixed). Also squashed several
TODOs related to running out of header space when allocating a node.
If the buffer runs out of header space, it will simply allocate a new
header, now.
* Dealt with some TODOs regarding reverting the buffer to its previous
state when running out of memory after allocating a few nodes.
* Added several TODOs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25256 a95241bf-73f2-0310-859d-f6bbb57e9c96
This fixes bug #1900 for real.
* Rearranged find_page_candidate() a bit, removed duplicate code, added a panic
in case the marker state is invalid.
* Some cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25255 a95241bf-73f2-0310-859d-f6bbb57e9c96
arp_update_entry(). While arp_timer() was sending the last request
arp_update_entry() could be called (caused by an incoming reply) and
free the request buffer, which arp_timer() would free a moment later
again. The problem is not completely solved, since a duplicate reply can
still cause a double free. Checked in mainly for Axel's reading
pleasure. :-)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25252 a95241bf-73f2-0310-859d-f6bbb57e9c96
sPageLock. This could easily mess up the page queue.
* Now, remove_page_marker() gets the lock itself. This fixes bug #1900.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25250 a95241bf-73f2-0310-859d-f6bbb57e9c96
block would be incorrectly addressed when allocating a stream - this could
cause random blocks to be overwritten, and therefore could cause many sorts
of problems.
* Moved BFS_TRACING macro to the tracing_config.h file, and let it follow the
new semantics of those other macros in there.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25249 a95241bf-73f2-0310-859d-f6bbb57e9c96
if the other end is not a Haiku host (retrieving of urgent data is still
missing).
* Resolved TODO: SendData() now sends a SIGPIPE when trying to send on a
closed connection.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25245 a95241bf-73f2-0310-859d-f6bbb57e9c96
this (seems to be what R5 BStatusBar does):
* combine the "trailing text" with the "trailing label" and truncate the
resulting string on the left side according to the width of the entire
control
* combine the "label" with the "text" and truncate that on the right side
according to the space left by the right hand text.
-> No more overlaps (theoretically, in practise there are still overlaps
because our BFont::TruncateString() does not respect the width in some
situations.)
* Changed _SetTextData() accordingly, it is not used anymore for the
label and trailing label, and could therefor be simplified a little.
* fixed _BarFrame() to not return fractional coords, which could sometimes
leave a dirty line of pixels.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25244 a95241bf-73f2-0310-859d-f6bbb57e9c96
our repository, and integrated it to the build system.
* Got it from: http://www.icir.org/christian/sock.html (sock-0.3).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25242 a95241bf-73f2-0310-859d-f6bbb57e9c96
we know that the connection was torn down cleanly, and there are no inflight
segments floating around anymore.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25239 a95241bf-73f2-0310-859d-f6bbb57e9c96
fixes the "endless discussions" when closing a local connection - only
happened on a simultaneous close.
* A FIN in TIME_WAIT now updates the time-wait timer, as required by the
TCP specification.
* Entering TIME_WAIT now cancels all connection timers. We might want to
think about putting time wait connections into a separate hash, and delete
the socket early on.
* Added tracing support for send/receive, timers, and state changes.
* Cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25236 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Introduced the TCP_TRACING macro in tracing_config.h.
* Enlarged the default trace size to something a tiny bit useful (but still
acceptable for systems with little RAM).
* Cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25235 a95241bf-73f2-0310-859d-f6bbb57e9c96
off the screen at all, it will be moved back on when the window is activated.
I almost think this might be a reasonable default implementation for
WindowActivated in BWindow :)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25234 a95241bf-73f2-0310-859d-f6bbb57e9c96
The media kit will always call BMediaNode
and BMediaAddOn functions with valid pointers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25232 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Implement "close" command that actively closes the server socket, or does
an simultaneous close. Even though this triggers an "endless conversation"
between two time-wait endpoints on Haiku, it works fine in the shell.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25225 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Pick 8 random icons from the application and preference folders
* Pick 8 different icons when the game starts again
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25224 a95241bf-73f2-0310-859d-f6bbb57e9c96
now used from various places that previously did not cancel all timers
they should have.
* When a connection moves to the CLOSED state, it should cancel all timers;
this prevents from sending a reset at the end of a connection.
* If the persist/delayed acknowledge timers were canceled too late, they might
still have tried to send something (which would eventually cause a reset
sent to the peer).
* Follow RFC 1337 with respect to time wait assassination prevention (ie.
we now ignore resets from peers in time wait state).
* _SegmentReceived() must not check the sequence of a time wait connection;
it prevented sending a reset when that was due (a new connection request
would time out, instead of fail immediately).
* Also, that method must never be called in the LISTEN or SYNCHRONIZE_SENT
states, so we don't need to check for those.
* We don't have to wait in Close() until the connection is actually closed -
removed a TODO. TCP should handle this internally.
* Renamed _ShutdownEgress() to _Shutdown().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25219 a95241bf-73f2-0310-859d-f6bbb57e9c96
one next. This should work around the problem Ingo observed with the OpenSSH
tests (not tested, though).
* The only TCP compliant fix for this problem would be to not enter time wait
for local connections at all (which I will do soon).
* Another work around other implementations use is to accept incoming
connections for time wait endpoints (the connection will then be replaced).
I'm not yet sure if I want that behaviour, though.
* Added tracing for unbinding endpoints (with stack trace) to investigate
another bug (sometimes closed connections aren't actually closed).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25218 a95241bf-73f2-0310-859d-f6bbb57e9c96