Skip to content

Commit c6b74a1

Browse files
Merge pull request ROBOTIS-GIT#395 from ROBOTIS-GIT/develop
- fixed memory leak issue (group sync/bulk series)
2 parents fc039b0 + 41d6dfe commit c6b74a1

File tree

5 files changed

+42
-0
lines changed

5 files changed

+42
-0
lines changed

c/src/dynamixel_sdk/group_bulk_read.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ void groupBulkReadRemoveParam(int group_num, uint8_t id)
183183
if (groupData[group_num].data_list[data_num].id == NOT_USED_ID) // NOT exist
184184
return;
185185

186+
free(groupData[group_num].data_list[data_num].data);
186187
groupData[group_num].data_list[data_num].data = 0;
187188

188189
groupData[group_num].data_list[data_num].id = NOT_USED_ID;
@@ -194,13 +195,22 @@ void groupBulkReadRemoveParam(int group_num, uint8_t id)
194195

195196
void groupBulkReadClearParam(int group_num)
196197
{
198+
int data_num = 0;
197199
int port_num = groupData[group_num].port_num;
198200

199201
if (size(group_num) == 0)
200202
return;
201203

204+
for (data_num = 0; data_num < groupData[group_num].data_list_length; data_num++)
205+
{
206+
free(groupData[group_num].data_list[data_num].data);
207+
groupData[group_num].data_list[data_num].data = 0;
208+
}
209+
210+
free(groupData[group_num].data_list);
202211
groupData[group_num].data_list = 0;
203212

213+
free(packetData[port_num].data_write);
204214
packetData[port_num].data_write = 0;
205215

206216
groupData[group_num].data_list_length = 0;

c/src/dynamixel_sdk/group_bulk_write.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ void groupBulkWriteRemoveParam(int group_num, uint8_t id)
219219

220220
groupData[group_num].data_list[data_num].data_end = 0;
221221

222+
free(groupData[group_num].data_list[data_num].data);
222223
groupData[group_num].data_list[data_num].data = 0;
223224

224225
groupData[group_num].data_list[data_num].data_length = 0;
@@ -274,6 +275,7 @@ uint8_t groupBulkWriteChangeParam(int group_num, uint8_t id, uint16_t start_addr
274275
}
275276
void groupBulkWriteClearParam(int group_num)
276277
{
278+
int data_num = 0;
277279
int port_num = groupData[group_num].port_num;
278280

279281
if (groupData[group_num].protocol_version == 1)
@@ -282,8 +284,16 @@ void groupBulkWriteClearParam(int group_num)
282284
if (size(group_num) == 0)
283285
return;
284286

287+
for (data_num = 0; data_num < groupData[group_num].data_list_length; data_num++)
288+
{
289+
free(groupData[group_num].data_list[data_num].data);
290+
groupData[group_num].data_list[data_num].data = 0;
291+
}
292+
293+
free(groupData[group_num].data_list);
285294
groupData[group_num].data_list = 0;
286295

296+
free(packetData[port_num].data_write);
287297
packetData[port_num].data_write = 0;
288298

289299
groupData[group_num].data_list_length = 0;

c/src/dynamixel_sdk/group_sync_read.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ void groupSyncReadRemoveParam(int group_num, uint8_t id)
173173
if (groupData[group_num].data_list[data_num].id == NOT_USED_ID) // NOT exist
174174
return;
175175

176+
free(groupData[group_num].data_list[data_num].data);
176177
groupData[group_num].data_list[data_num].data = 0;
177178

178179
groupData[group_num].data_list[data_num].id = NOT_USED_ID;
@@ -181,6 +182,7 @@ void groupSyncReadRemoveParam(int group_num, uint8_t id)
181182
}
182183
void groupSyncReadClearParam(int group_num)
183184
{
185+
int data_num = 0;
184186
int port_num = groupData[group_num].port_num;
185187

186188
if (groupData[group_num].protocol_version == 1)
@@ -189,8 +191,16 @@ void groupSyncReadClearParam(int group_num)
189191
if (size(group_num) == 0)
190192
return;
191193

194+
for (data_num = 0; data_num < groupData[group_num].data_list_length; data_num++)
195+
{
196+
free(groupData[group_num].data_list[data_num].data);
197+
groupData[group_num].data_list[data_num].data = 0;
198+
}
199+
200+
free(groupData[group_num].data_list);
192201
groupData[group_num].data_list = 0;
193202

203+
free(packetData[port_num].data_write);
194204
packetData[port_num].data_write = 0;
195205

196206
groupData[group_num].data_list_length = 0;

c/src/dynamixel_sdk/group_sync_write.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ void groupSyncWriteRemoveParam(int group_num, uint8_t id)
202202

203203
groupData[group_num].data_list[data_num].data_end = 0;
204204

205+
free(groupData[group_num].data_list[data_num].data);
205206
groupData[group_num].data_list[data_num].data = 0;
206207

207208
groupData[group_num].data_list[data_num].id = NOT_USED_ID;
@@ -251,13 +252,22 @@ uint8_t groupSyncWriteChangeParam(int group_num, uint8_t id, uint32_t data, uint
251252

252253
void groupSyncWriteClearParam(int group_num)
253254
{
255+
int data_num = 0;
254256
int port_num = groupData[group_num].port_num;
255257

256258
if (size(group_num) == 0)
257259
return;
258260

261+
for (data_num = 0; data_num < groupData[group_num].data_list_length; data_num++)
262+
{
263+
free(groupData[group_num].data_list[data_num].data);
264+
groupData[group_num].data_list[data_num].data = 0;
265+
}
266+
267+
free(groupData[group_num].data_list);
259268
groupData[group_num].data_list = 0;
260269

270+
free(packetData[port_num].data_write);
261271
packetData[port_num].data_write = 0;
262272

263273
groupData[group_num].data_list_length = 0;

c/src/dynamixel_sdk/protocol2_packet_handler.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,8 @@ void readTx2(int port_num, uint8_t id, uint16_t address, uint16_t length)
810810

811811
txPacket2(port_num);
812812

813+
free(packetData[port_num].tx_packet);
814+
813815
// set packet timeout
814816
if (packetData[port_num].communication_result == COMM_SUCCESS)
815817
setPacketTimeout(port_num, (uint16_t)(length + 11));

0 commit comments

Comments
 (0)