About Genode::Signal reception
Frank Kaiser
frank.kaiser at ...24...
Fri Jul 2 18:53:52 CEST 2010
Hello
I want to use the Genode signalling scheme to control asynchrones data
exchange between a client and a server. To get familiar with it I
started with a test implementation on the server side.
The server's main function fills some data into a buffer and
instantiates a Signal receiver thread which shall dump the buffer
content on signal reception. Then it instantiates a Signal transmitter
to fire a signal at the receiver for one time. The unexpected outcome is
that it looks as if the receiver gets the signal twice.
This is the implementation in main():
Signal_receiver s_rcvr;
Signal_context ct;
Receiver *ser_rx = new (env()->heap()) Receiver(s_rcvr,
srv.transmit);
Signal_context_capability send_cap = s_rcvr.manage(&ct);
Signal_transmitter tx(send_cap);
tx.submit();
The receiver thread's entry() function (class Receiver derived from
class Thread<>; the constructor's 2nd parameter is a handle to the
buffer already filled with data, which is accessed thru _transmit
inside the function):
void entry()
{
uint8_t ch[32];
int cnt = 0;
while (1)
{
Signal signal = _receiver.wait_for_signal();
#if 1
for (unsigned out = 0; out < sizeof(ch); ++out)
{
int rd = _transmit.read_byte();
if (rd >= 0) ch[out] = uint8_t(rd);
else break;
}
++cnt;
ch[31] = '\0';
printf("Found characters: %s\n", &ch[0]);
ch[0] = '\0';
printf("Caught signals: %d\n", cnt);
#endif
}
}
The debug output shows that the 2 printf()s inside the while() loop are
called 2 times, which clearly indicates that _receiver.wait_for_signal()
returned 2 times. I wonder what goes wrong, and what I should do to get
rid of this odd behaviour.
Regards
Frank
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.genode.org/pipermail/users/attachments/20100702/08b10dd8/attachment.html>
More information about the users
mailing list