Hi,

On 02/04/2011 09:39 AM, Alon Levy wrote:

<snip>

Hmm,

This seems error prone. What if the other side is sending a success state for 
some
other reason? Either error->code == VSC_SUCCESS can only be send for the
adding a reader case and keeping track of num_pending_reader_inserts is
not necessary or this seems racy to me. Maybe add a VCS_READER_ADD_SUCCESS
error code ?

Ok, I admit this whole counter was a way to quickly fix the problem that I was 
getting a second VSC_SUCCESS. The idea was to have a single outstanding request 
that needs an answer, thereby removing ambiguity. But the implementation 
doesn't do that, hence the hack of _num_pending_reader_inserts. To keep the 
protocol as is (btw I just *removed* such a message because I wanted to 
simplify the protocol - ReaderAddResponse. equivalent to the suggested error 
code) I could just serialize to:
  client: request reader add
  client: wait for response
  server: send VSCError.code==VSC_SUCCESS
  client: report card insert
  cient:  wait for response


That is still racy. What if a VSCError.code==VSC_SUCCESS is already in the pipe
from server to client for some other request send by the client earlier. Then
the client will report the card insert, when it receives the unrelated
VSCError.code==VSC_SUCCESS.

The way I've fixed issues like this with the usb network redirection stuff
I'm doing is give the common header for all requests an id field and increment
that which each packet send. When the server (in your case) then sends a 
response
that includes the id of the request it is a response to so that requests and
responses can be mapped 1 on 1.

Regards,

Hans
_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to