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

Reply via email to