Segfaults while calling Rpc_methods from client.h
adit267.kousik at ...9...
Tue May 12 02:37:58 CEST 2015
Hello Dr. Norman,
I stumbled upon some useful examples in test/ds_ownership and general
search showed me how to pull off shared memory. It's an interesting
What I did:
Ram_dataspace_capability ds = env()->ram_session()->alloc(SIZE);
void* arg = env()->rm_session()->attach(ds);
I returned this ds through a getDataspace() RPC method on the server side
to the invoking client.
I'm able to effectively write bulk data between components. Thank you for
directing me toward this.
I have a couple of spinoff questions though.
1. Initially I tried creating a Ram_connection ram1 and allocated as in the
Then Ram_dataspace_capability ds = ram1.alloc(SIZE); and attached ds to RM
session and sent back ds.
But the client threw a C++ IPC error and called abort().
A) Is this because ram1 was local to the server?
B) Is the transfer quota mechanism is similar to the transfer_quota from
the client during the creation of a session
in the constructor?
2. I'm still trying to get my head around the concept of a capability. I
tried going through the definition of a capability
in base/capability.h, but I seemed to get nowhere. What can a user do with
a capability - mechanisms such as
attach and detach with the help of a capability etc.
I'm sure you've had similar questions asked before. Thank you taking the
time to respond.
On Mon, May 11, 2015 at 2:32 PM, Aditya Kousik <adit267.kousik at ...9...>
> Hello Norman,
> This documentation is quite exquisite, I'm just laying my eyes on it. Are
> there any implementation examples to support the sequence diagrams? They'll
> help map the theory to the implementation.
> On Mon, May 11, 2015 at 2:02 PM, Norman Feske <
> norman.feske at ...1...> wrote:
>> Hi Aditya,
>> passing non-POD objects such as connected lists, maps, etc. as RPC
>> arguments is not supposed to work. The reason is that a pointer with a
>> meaning in one address space is meaningless in another address space.
>> Please refer to the Section 8.12 of the manual  and particularly
>> Section 8.12.2 for more details about the RPC mechanism.
>> To transfer bulk data from one component to another, you may need to
>> manually serialize your information to a shared memory buffer, to be
>> picked up on the receiving side. See section 3.6 for the various
>> approaches of inter-component communication.
>> On 05/11/2015 10:49 PM, Aditya Kousik wrote:
>> > Hello,
>> > Calling Rpc_<method>(args, ...) from Session_client causes segfault 11
>> > when I try to pass anything other than a default datatype. I'm trying to
>> > pass an object of std::string, and it prints the string inside the
>> > <method> just fine, but when I make the call<Rpc_method>(st), it breaks.
>> > I tried working around this by creating a char* pointer instead. Print
>> > inside this method works and the rpc to session_component method also
>> > reaches, but whatever pointer I receive in the session_component is
>> > garbage data. How do I fix the RPC calls?
>> > Thanks,
>> > Aditya.
>> Dr.-Ing. Norman Feske
>> Genode Labs
>> http://www.genode-labs.com · http://genode.org
>> Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
>> Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
>> One dashboard for servers and applications across Physical-Virtual-Cloud
>> Widest out-of-the-box monitoring support with 50+ applications
>> Performance metrics, stats and reports that give you Actionable Insights
>> Deep dive visibility with transaction tracing using APM Insight.
>> genode-main mailing list
>> genode-main at lists.sourceforge.net
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the users