Mark gles pipe connected after callback invoked

Currently the net pipe is mark connected right after initialization
through asyncConnector_run invokation. However, asyncConnector_run is
intended only invoked when callback through select.

In some extrem situation, this will cause the qemu pipe driver begin
send buffer before the connection is setup.

Change this to be asyncConnector_run usage correct, and sendBuffer will
check the connection status.

Change-Id: Ib10e72e56e1ed5017fc3654b0fce8cacf484c8f8
Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
diff --git a/android/hw-pipe-net.c b/android/hw-pipe-net.c
index 5a25401..3e8dc70 100644
--- a/android/hw-pipe-net.c
+++ b/android/hw-pipe-net.c
@@ -204,10 +204,9 @@
         }
 
         loopIo_init(pipe->io, looper, fd, netPipe_io_func, pipe);
-        asyncConnector_init(pipe->connector, address, pipe->io);
+        status = asyncConnector_init(pipe->connector, address, pipe->io);
         pipe->state = STATE_CONNECTING;
 
-        status = asyncConnector_run(pipe->connector);
         if (status == ASYNC_ERROR) {
             D("%s: Could not connect to socket: %s",
               __FUNCTION__, errno_str);
@@ -234,6 +233,17 @@
     netPipe_free(pipe);
 }
 
+static int netPipeReadySend(NetPipe *pipe)
+{
+    if (pipe->state == STATE_CONNECTED)
+        return 0;
+    else if (pipe->state == STATE_CONNECTING)
+        return PIPE_ERROR_AGAIN;
+    else if (pipe->hwpipe == NULL)
+        return PIPE_ERROR_INVAL;
+    else
+        return PIPE_ERROR_IO;
+}
 
 static int
 netPipe_sendBuffers( void* opaque, const GoldfishPipeBuffer* buffers, int numBuffers )
@@ -245,6 +255,10 @@
     const GoldfishPipeBuffer* buff = buffers;
     const GoldfishPipeBuffer* buffEnd = buff + numBuffers;
 
+    ret = netPipeReadySend(pipe);
+    if (ret != 0)
+        return ret;
+
     for (; buff < buffEnd; buff++)
         count += buff->size;