Switch to BWeakReference class. Hope this does not break anything. Calling virtual destructur on a struct
should work fine, right? git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42764 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -50,13 +50,13 @@ typedef DoublyLinkedList<net_socket_private> SocketList;
|
|||||||
|
|
||||||
struct net_socket_private : net_socket,
|
struct net_socket_private : net_socket,
|
||||||
DoublyLinkedListLinkImpl<net_socket_private>,
|
DoublyLinkedListLinkImpl<net_socket_private>,
|
||||||
WeakReferenceable<net_socket_private> {
|
BWeakReferenceable {
|
||||||
net_socket_private();
|
net_socket_private();
|
||||||
~net_socket_private();
|
~net_socket_private();
|
||||||
|
|
||||||
void RemoveFromParent();
|
void RemoveFromParent();
|
||||||
|
|
||||||
WeakPointer<net_socket_private>* parent;
|
BWeakReference<net_socket_private> parent;
|
||||||
team_id owner;
|
team_id owner;
|
||||||
uint32 max_backlog;
|
uint32 max_backlog;
|
||||||
uint32 child_count;
|
uint32 child_count;
|
||||||
@@ -82,8 +82,7 @@ static mutex sSocketLock;
|
|||||||
|
|
||||||
|
|
||||||
net_socket_private::net_socket_private()
|
net_socket_private::net_socket_private()
|
||||||
: WeakReferenceable<net_socket_private>(this),
|
:
|
||||||
parent(NULL),
|
|
||||||
owner(-1),
|
owner(-1),
|
||||||
max_backlog(0),
|
max_backlog(0),
|
||||||
child_count(0),
|
child_count(0),
|
||||||
@@ -148,7 +147,6 @@ net_socket_private::RemoveFromParent()
|
|||||||
{
|
{
|
||||||
ASSERT(!is_in_socket_list && parent != NULL);
|
ASSERT(!is_in_socket_list && parent != NULL);
|
||||||
|
|
||||||
parent->ReleaseReference();
|
|
||||||
parent = NULL;
|
parent = NULL;
|
||||||
|
|
||||||
mutex_lock(&sSocketLock);
|
mutex_lock(&sSocketLock);
|
||||||
@@ -337,10 +335,11 @@ socket_receive_no_buffer(net_socket* socket, msghdr* header, void* data,
|
|||||||
static void
|
static void
|
||||||
print_socket_line(net_socket_private* socket, const char* prefix)
|
print_socket_line(net_socket_private* socket, const char* prefix)
|
||||||
{
|
{
|
||||||
|
BReference<net_socket_private> parent = socket->parent.GetReference();
|
||||||
kprintf("%s%p %2d.%2d.%2d %6ld %p %p %p%s\n", prefix, socket,
|
kprintf("%s%p %2d.%2d.%2d %6ld %p %p %p%s\n", prefix, socket,
|
||||||
socket->family, socket->type, socket->protocol, socket->owner,
|
socket->family, socket->type, socket->protocol, socket->owner,
|
||||||
socket->first_protocol, socket->first_info, socket->parent,
|
socket->first_protocol, socket->first_info, parent.Get(),
|
||||||
socket->parent != NULL ? socket->is_connected ? " (c)" : " (p)" : "");
|
parent.Get() != NULL ? socket->is_connected ? " (c)" : " (p)" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -357,8 +356,8 @@ dump_socket(int argc, char** argv)
|
|||||||
kprintf("SOCKET %p\n", socket);
|
kprintf("SOCKET %p\n", socket);
|
||||||
kprintf(" family.type.protocol: %d.%d.%d\n",
|
kprintf(" family.type.protocol: %d.%d.%d\n",
|
||||||
socket->family, socket->type, socket->protocol);
|
socket->family, socket->type, socket->protocol);
|
||||||
WeakReference<net_socket_private> parent = socket->parent;
|
BReference<net_socket_private> parent = socket->parent.GetReference();
|
||||||
kprintf(" parent: %p (%p)\n", parent.Get(), socket->parent);
|
kprintf(" parent: %p\n", parent.Get());
|
||||||
kprintf(" first protocol: %p\n", socket->first_protocol);
|
kprintf(" first protocol: %p\n", socket->first_protocol);
|
||||||
kprintf(" first module_info: %p\n", socket->first_info);
|
kprintf(" first module_info: %p\n", socket->first_info);
|
||||||
kprintf(" options: %x\n", socket->options);
|
kprintf(" options: %x\n", socket->options);
|
||||||
@@ -719,7 +718,7 @@ socket_spawn_pending(net_socket* _parent, net_socket** _socket)
|
|||||||
|
|
||||||
// add to the parent's list of pending connections
|
// add to the parent's list of pending connections
|
||||||
parent->pending_children.Add(socket);
|
parent->pending_children.Add(socket);
|
||||||
socket->parent = parent->GetWeakPointer();
|
socket->parent = parent;
|
||||||
parent->child_count++;
|
parent->child_count++;
|
||||||
|
|
||||||
*_socket = socket;
|
*_socket = socket;
|
||||||
@@ -815,7 +814,7 @@ socket_connected(net_socket* _socket)
|
|||||||
|
|
||||||
TRACE("socket_connected(%p)\n", socket);
|
TRACE("socket_connected(%p)\n", socket);
|
||||||
|
|
||||||
WeakReference<net_socket_private> parent = socket->parent;
|
BReference<net_socket_private> parent = socket->parent.GetReference();
|
||||||
if (parent.Get() == NULL)
|
if (parent.Get() == NULL)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
@@ -843,7 +842,7 @@ socket_aborted(net_socket* _socket)
|
|||||||
|
|
||||||
TRACE("socket_aborted(%p)\n", socket);
|
TRACE("socket_aborted(%p)\n", socket);
|
||||||
|
|
||||||
WeakReference<net_socket_private> parent = socket->parent;
|
BReference<net_socket_private> parent = socket->parent.GetReference();
|
||||||
if (parent.Get() == NULL)
|
if (parent.Get() == NULL)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user