Update of /cvsroot/playerstage/code/player/client_libs/libplayerc
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31331/client_libs/libplayerc

Modified Files:
        client.c dev_laser.c dev_vectormap.c playerc.h 
Log Message:
These changes were contributed by David Olsen, including:
Extensive NAV200 changes, adding new constallelation configuration options
Fix to memory leak of messages when a player client is destroyed
Fix to laser interface which assumed intensity was provided
Fix to memory leaks in vectormap interface (mainly leaking geoms)
Proper error handling in C++ PlayerClient Peek
Mutex lock in VectorMapProxy GetLayerData
playerv vectormap rendering bug 



Index: client.c
===================================================================
RCS file: /cvsroot/playerstage/code/player/client_libs/libplayerc/client.c,v
retrieving revision 1.93
retrieving revision 1.94
diff -C2 -d -r1.93 -r1.94
*** client.c    17 Jan 2008 04:37:23 -0000      1.93
--- client.c    4 Feb 2008 18:59:43 -0000       1.94
***************
*** 185,188 ****
--- 185,195 ----
  void playerc_client_destroy(playerc_client_t *client)
  {
+   player_msghdr_t header;
+   // Pop everything off the queue.
+   while (!playerc_client_pop(client, &header, client->data))
+   {
+         playerxdr_cleanup_message(client->data,header.addr.interf, 
header.type, header.subtype);
+   }
+   
    free(client->data);
    free(client->write_xdrdata);
***************
*** 630,633 ****
--- 637,641 ----
        case PLAYER_MSGTYPE_RESP_ACK:
          PLAYERC_WARN ("Discarding unclaimed ACK");
+         playerxdr_cleanup_message(client->data, header.addr.interf, 
header.type, header.subtype);
          break;
        case PLAYER_MSGTYPE_SYNCH:
***************
*** 670,673 ****
--- 678,682 ----
          }
        default:
+         playerxdr_cleanup_message(client->data, header.addr.interf, 
header.type, header.subtype);
          PLAYERC_WARN1 ("unexpected message type [%s]", 
msgtype_to_str(header.type));
          printf("address: %u:%u:%s:%u\nsize: %u",

Index: dev_laser.c
===================================================================
RCS file: /cvsroot/playerstage/code/player/client_libs/libplayerc/dev_laser.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -C2 -d -r1.48 -r1.49
*** dev_laser.c 17 Jan 2008 04:37:23 -0000      1.48
--- dev_laser.c 4 Feb 2008 18:59:43 -0000       1.49
***************
*** 148,152 ****
        device->point[i].px = r * cos(b);
        device->point[i].py = r * sin(b);
-       device->intensity[i] = scan_data->intensity[i];
        b += db;
  
--- 148,151 ----
***************
*** 156,159 ****
--- 155,160 ----
          device->min_left = r;
      }
+     for (i = 0; i < scan_data->intensity_count; i++)
+       device->intensity[i] = scan_data->intensity[i];
  
      device->scan_id = scan_data->id;
***************
*** 184,190 ****
        device->point[i].px = r * cos(b);
        device->point[i].py = r * sin(b);
-       device->intensity[i] = scan_data->scan.intensity[i];
        b += db;
      }
  
      device->scan_id = scan_data->scan.id;
--- 185,192 ----
        device->point[i].px = r * cos(b);
        device->point[i].py = r * sin(b);
        b += db;
      }
+     for (i = 0; i < scan_data->scan.intensity_count; i++)
+       device->intensity[i] = scan_data->scan.intensity[i];
  
      device->scan_id = scan_data->scan.id;

Index: playerc.h
===================================================================
RCS file: /cvsroot/playerstage/code/player/client_libs/libplayerc/playerc.h,v
retrieving revision 1.249
retrieving revision 1.250
diff -C2 -d -r1.249 -r1.250
*** playerc.h   30 Jan 2008 02:06:45 -0000      1.249
--- playerc.h   4 Feb 2008 18:59:43 -0000       1.250
***************
*** 2254,2257 ****
--- 2254,2259 ----
    /** Layer info. */
    player_vectormap_layer_info_t** layers_info;
+   /** geos geometry returned by get_feature_data */
+   GEOSGeom geom;
  
  } playerc_vectormap_t;
***************
*** 2278,2282 ****
  void playerc_vectormap_cleanup(playerc_vectormap_t *device);
  
! /** @brief Get an individual feature as a geos geometry. Must only be used 
after a successful call to playerc_vectormap_get_layer_data. */
  GEOSGeom playerc_vectormap_get_feature_data(playerc_vectormap_t *device, 
unsigned layer_index, unsigned feature_index);
  
--- 2280,2285 ----
  void playerc_vectormap_cleanup(playerc_vectormap_t *device);
  
! /** @brief Get an individual feature as a geos geometry. Must only be used 
after a successful call to playerc_vectormap_get_layer_data.
!  *  The geos geometry is owned by the proxy, duplicate it if it is needed 
after the next call to get_feature_data. Non-reentrant. */
  GEOSGeom playerc_vectormap_get_feature_data(playerc_vectormap_t *device, 
unsigned layer_index, unsigned feature_index);
  

Index: dev_vectormap.c
===================================================================
RCS file: 
/cvsroot/playerstage/code/player/client_libs/libplayerc/dev_vectormap.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** dev_vectormap.c     24 Oct 2007 22:32:02 -0000      1.4
--- dev_vectormap.c     4 Feb 2008 18:59:43 -0000       1.5
***************
*** 100,103 ****
--- 100,104 ----
    initGEOS(geosprint,geosprint);
  #endif
+   device->geom = NULL;
    return playerc_device_subscribe(&device->info, access);
  }
***************
*** 106,109 ****
--- 107,115 ----
  int playerc_vectormap_unsubscribe(playerc_vectormap_t *device)
  {
+   if (device->geom)
+   {
+     GEOSGeom_destroy(device->geom);
+     device->geom = NULL;
+   }
  #ifdef HAVE_GEOS
    finishGEOS();
***************
*** 168,174 ****
    {
      PLAYERC_ERR("failed to get layer data");
!     free(data_req.name);
      return -1;
    }
    player_vectormap_layer_data_t_free(device->layers_data[layer_index]);
    device->layers_data[layer_index] = data_resp;
--- 174,181 ----
    {
      PLAYERC_ERR("failed to get layer data");
!     player_vectormap_layer_data_t_cleanup(&data_req);
      return -1;
    }
+   player_vectormap_layer_data_t_cleanup(&data_req);
    player_vectormap_layer_data_t_free(device->layers_data[layer_index]);
    device->layers_data[layer_index] = data_resp;
***************
*** 185,192 ****
      printf("%02x", 
device->layers[layer_index]->features[feature_index].wkb[i]);
    printf("\n");*/
!   return GEOSGeomFromWKB_buf(
      device->layers_data[layer_index]->features[feature_index].wkb,
      device->layers_data[layer_index]->features[feature_index].wkb_count
    );
  #else
    return NULL;
--- 192,205 ----
      printf("%02x", 
device->layers[layer_index]->features[feature_index].wkb[i]);
    printf("\n");*/
!   if (device->geom)
!   {
!     GEOSGeom_destroy(device->geom);
!     device->geom = NULL;
!   }
!   device->geom = GEOSGeomFromWKB_buf(
      device->layers_data[layer_index]->features[feature_index].wkb,
      device->layers_data[layer_index]->features[feature_index].wkb_count
    );
+   return device->geom;
  #else
    return NULL;


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to