Skip to content

Commit 9e56dd4

Browse files
committed
Merge pull request #315 from wiedemeyer/open_device_fix
fixed memory leak in openDevice
2 parents 9a70d5e + 8924deb commit 9e56dd4

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

examples/protonect/include/libfreenect2/libfreenect2.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ class LIBFREENECT2_API Freenect2
106106
std::string getDeviceSerialNumber(int idx);
107107
std::string getDefaultDeviceSerialNumber();
108108

109+
/* Important note:
110+
* After passing a PacketPipeline object to libfreenect2 do not use or free the object,
111+
* libfreenect2 will take care. If openDevice fails the PacketPipeline object will get
112+
* deleted. A new PacketPipeline object has to be created each time a device is opened.
113+
*/
109114
Freenect2Device *openDevice(int idx);
110115
Freenect2Device *openDevice(int idx, const PacketPipeline *factory);
111116
Freenect2Device *openDevice(const std::string &serial);

examples/protonect/src/libfreenect2.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ Freenect2Device *Freenect2::openDevice(int idx, const PacketPipeline *pipeline,
678678
if(idx >= num_devices)
679679
{
680680
std::cout << "[Freenect2Impl] requested device " << idx << " is not connected!" << std::endl;
681+
delete pipeline;
681682
return device;
682683
}
683684

@@ -688,6 +689,7 @@ Freenect2Device *Freenect2::openDevice(int idx, const PacketPipeline *pipeline,
688689
{
689690
std::cout << "[Freenect2Impl] failed to get device " << PrintBusAndDevice(dev.dev)
690691
<< " (the device may already be open)" << std::endl;
692+
delete pipeline;
691693
return device;
692694
}
693695

@@ -696,6 +698,7 @@ Freenect2Device *Freenect2::openDevice(int idx, const PacketPipeline *pipeline,
696698
if(r != LIBUSB_SUCCESS)
697699
{
698700
std::cout << "[Freenect2Impl] failed to open Kinect v2 " << PrintBusAndDevice(dev.dev) << "!" << std::endl;
701+
delete pipeline;
699702
return device;
700703
}
701704

@@ -733,6 +736,7 @@ Freenect2Device *Freenect2::openDevice(int idx, const PacketPipeline *pipeline,
733736
else if(r != LIBUSB_SUCCESS)
734737
{
735738
std::cout << "[Freenect2Impl] failed to reset Kinect v2 " << PrintBusAndDevice(dev.dev) << "!" << std::endl;
739+
delete pipeline;
736740
return device;
737741
}
738742
}
@@ -765,11 +769,11 @@ Freenect2Device *Freenect2::openDevice(const std::string &serial, const PacketPi
765769
{
766770
if(impl_->enumerated_devices_[idx].serial == serial)
767771
{
768-
device = openDevice(idx, pipeline);
769-
break;
772+
return openDevice(idx, pipeline);
770773
}
771774
}
772775

776+
delete pipeline;
773777
return device;
774778
}
775779

0 commit comments

Comments
 (0)