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