Revision: 7248
          http://playerstage.svn.sourceforge.net/playerstage/?rev=7248&view=rev
Author:   thjc
Date:     2009-01-06 19:31:27 +0000 (Tue, 06 Jan 2009)

Log Message:
-----------
Applied version of patch 2145007: fix up incorrect return type from 
playerc_client_read when sock < 0. Also removes small delay from read loop when 
not data is waiting (using a poll instead).

Modified Paths:
--------------
    code/player/branches/release-2-1-patches/client_libs/libplayerc/client.c

Modified: 
code/player/branches/release-2-1-patches/client_libs/libplayerc/client.c
===================================================================
--- code/player/branches/release-2-1-patches/client_libs/libplayerc/client.c    
2009-01-06 18:51:07 UTC (rev 7247)
+++ code/player/branches/release-2-1-patches/client_libs/libplayerc/client.c    
2009-01-06 19:31:27 UTC (rev 7248)
@@ -88,7 +88,7 @@
                               char *data);
 int playerc_client_writepacket(playerc_client_t *client,
                                player_msghdr_t *header,
-                               char *data);
+                               const char *data);
 void playerc_client_push(playerc_client_t *client,
                          player_msghdr_t *header, void *data);
 int playerc_client_pop(playerc_client_t *client,
@@ -620,23 +620,24 @@
 // Read and process a packet (blocking)
 void *playerc_client_read(playerc_client_t *client)
 {
-  void* ret_proxy;
+  void* ret_proxy = NULL;
   int ret;
-  // 10ms delay
-  struct timespec sleeptime = {0,10000000};
 
-  for(;;)
+  // In case we're in PULL mode, first request a round of data.
+  if(playerc_client_requestdata(client) < 0)
+    return NULL;
+  // now wait until we get a sync, or some data if in push mode
+  do
   {
-    // In case we're in PULL mode, first request a round of data.
-    if(playerc_client_requestdata(client) < 0)
-      return NULL;
     ret = playerc_client_read_nonblock_withproxy(client, &ret_proxy);
-    if((ret > 0) || (client->sock < 0))
+    if (ret < 0 || client->sock < 0)
+      break;
+    if(ret > 0)
       return ret_proxy;
-    if (ret < 0)
-      return NULL;
-    nanosleep(&sleeptime,NULL);
-  }
+    // if no data is available, then do a peek with infinite timeout...
+    // we cant do this first as we may already have data waiting on the 
internal queue
+  } while (playerc_client_internal_peek(client, -1) >= 0);
+  return NULL;
 }
 
 
@@ -1180,7 +1181,7 @@
 
 // Write a raw packet
 int playerc_client_writepacket(playerc_client_t *client,
-                               player_msghdr_t *header, char *data)
+                               player_msghdr_t *header, const char *data)
 {
   int bytes, ret, length;
   player_pack_fn_t packfunc;
@@ -1310,8 +1311,7 @@
 {
   int i, j;
   playerc_device_t *device;
-  void * ret;
-  ret = NULL;
+  void *ret = NULL;
 
   // Look for a device proxy to handle this data
   for (i = 0; i < client->device_count; i++)


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to