Well, I have based my statement on the next observation: when I
experemented with compositor client_connection() function, answering
non-EOK to compctl, after such answer compctl started to get EHANGUP
on subsequent calls to compositor session.
Let me reiterate: The server side closes the connection by means of
async_answer_*() only if the return value is EHANGUP. Do you observe
that the visualizer_enumerate_modes() returns EHANGUP? Other return
values WILL NOT close the connection.
Of course, the connection is also closed if you exit the
client_connection() routine.
Now, can you provide me with a test case where the bug you describe
actually happens? I know that you have written in the other thread that
you have added the all-zeroes mode in vesafb to workaround it. But I
can't find this workaround in order to undo it and see what happens
without it.
BTW: This is probably not related, but the client-side pattern in
compctl.c is not entirely correct. You should not create an exchange
before the for-loop and then call multiple async_req_*() in the loop.
The exchange is used to group multiple calls that together create a
single logical call. But in this case you are doing multiple independent
calls, thus the code should look like this:
async_exch_t *exch = async_exchange_begin(ctl_sess);
int rc = async_req_3_4(exch, COMPOSITOR_SELECT_VIEWPORT,
vp_id, VISUALIZER_ENUMERATE_MODES, n,
&index, &width, &height, &visual);
async_exchange_end(exch);
M.D.
_______________________________________________
HelenOS-devel mailing list
[email protected]
http://lists.modry.cz/listinfo/helenos-devel