summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpipe/pipe.c2
-rw-r--r--pflocal/io.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/libpipe/pipe.c b/libpipe/pipe.c
index 914816bc..4580b3ab 100644
--- a/libpipe/pipe.c
+++ b/libpipe/pipe.c
@@ -383,6 +383,8 @@ pipe_recv (struct pipe *pipe, int noblock, unsigned *flags, void **source,
if (source)
packet_read_source (packet, source);
+ else if (packet->source)
+ pipe_dealloc_addr(packet->source);
err = (*pipe->class->read)(packet, &dq, flags,
data, data_len, amount);
diff --git a/pflocal/io.c b/pflocal/io.c
index 74c2f970..36221a66 100644
--- a/pflocal/io.c
+++ b/pflocal/io.c
@@ -106,7 +106,7 @@ S_io_write (struct sock_user *user,
{
err = pipe_write (pipe, user->sock->flags & SOCK_NONBLOCK,
source_addr, data, data_len, amount);
- if (source_addr)
+ if (err && source_addr)
ports_port_deref (source_addr);
}