diff --git a/libports/src/lib/libc_lock_pipe/plugin.cc b/libports/src/lib/libc_lock_pipe/plugin.cc index 7c7f2387a..b17de62a8 100644 --- a/libports/src/lib/libc_lock_pipe/plugin.cc +++ b/libports/src/lib/libc_lock_pipe/plugin.cc @@ -142,15 +142,13 @@ namespace { } Genode::memset(_buffer, 0, PIPE_BUF_SIZE); - _lock_state = (Genode::Cancelable_lock::State*) - malloc(sizeof(Genode::Cancelable_lock::State)); + _lock_state = new (Genode::env()->heap()) + Genode::Cancelable_lock::State(Genode::Lock::LOCKED); if (!_lock_state) { PERR("pipe lock_state allocation failed"); } - *_lock_state = Genode::Lock::LOCKED; - _lock = new (Genode::env()->heap()) Genode::Lock(*_lock_state); if (!_lock) { PERR("pipe lock allocation failed"); @@ -173,7 +171,7 @@ namespace { context(_partner)->set_partner(0); } else { /* partner fd is already destroyed -> free shared resources */ - destroy(Genode::env()->heap(), _buffer); + free(_buffer); destroy(Genode::env()->heap(), _lock); destroy(Genode::env()->heap(), _lock_state); }