Is 'sampbuffer' declared as a local variable? If yes, this would explain the problem. When the program leaves the scope where 'sampbuffer' is declared, the destructor of 'Io_mem_connection' gets executed. By default, this destructor closes the session such that the session's dataspace gets destroyed. You can solve this problem in two ways. First, it is possible to tell 'sampbuffer' to keep the session open after the destuctor is called:
sampbuffer.on_destruction(Io_mem_connection::KEEP_OPEN);
Another solution would be declaring 'sampbuffer' als local static variable. Once constructed, one object instance will exist for the whole runtime of the program. Of course, you could also explicitely manage the lifetime of 'sampbuffer' by using the 'new' operator but in most cases (if you need one session during the whole execution time), a declaring the connection object as local static variable is most convenient.
The sampbuffer variable is not declared as a local variable. I have also tried keeping the session open as you suggested, but with no success. Just for the record, the message I keep getting is the following:
no RM attachment (READ pf_addr=20 pf_ip=2001248 from 08)virtual void Genode::Signal_session_component::submit(Genode::Signal_context_capability, unsigned int): invalid signal-context capability
Peter