Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libfreenect freezes before exiting #295

Closed
csantosbh opened this issue Jun 13, 2012 · 0 comments
Closed

libfreenect freezes before exiting #295

csantosbh opened this issue Jun 13, 2012 · 0 comments
Milestone

Comments

@csantosbh
Copy link

This issue happens randomly on my machine: By running the sample code available on the docs, sometimes the program would freeze for several seconds just before the exit point. After digging into the code, I found out that the library was freezing at the "freenect_process_events(m_ctx)" call. By moving the "m_stop=true" assignment to the top of the Freenect destructor, the device thread would finish without any problems while the m_devices container is being erased.

So, to solve this, I just had to apply these changes:

--- a/wrappers/cpp/libfreenect.hpp
+++ b/wrappers/cpp/libfreenect.hpp
@@ -182,10 +182,10 @@ namespace Freenect {
                        if(pthread_create(&m_thread, NULL, pthread_callback, (void*)this) != 0) throw std::runtime_error("Cannot initialize freenect thread");
                }
                ~Freenect() {
+                       m_stop = true;
                        for(DeviceMap::iterator it = m_devices.begin() ; it != m_devices.end() ; ++it) {
                                delete it->second;
                        }
-                       m_stop = true;
                        pthread_join(m_thread, NULL);
                        if(freenect_shutdown(m_ctx) < 0){} //FN_WARNING("Freenect did not shutdown in a clean fashion");
                }
@piedar piedar closed this as completed in cd5de90 Jan 19, 2014
yarikoptic added a commit to yarikoptic/libfreenect that referenced this issue Feb 14, 2015
libfreenect v0.3.0 Nucleus

* tag 'v0.3.0':
  Update CMakeLists.txt for v0.3.0
  OpenNI2-FreenectDriver: update README.md
  OpenNI2-FreenectDriver: OFF by default; pass -DBUILD_OPENNI2_DRIVER=ON to cmake to enable
  OpenNI2-FreenectDriver: support ONI_STREAM_PROPERTY_AUTO_WHITE_BALANCE and ONI_STREAM_PROPERTY_AUTO_EXPOSURE
  OpenNI2-FreenectDriver: reduce compiler warnings
  Added chunk processing callbacks for depth and video streams - fixes OpenKinect#351
  Fix missing semicolon in fakenect/record.c
  wrappers/cpp: Remove pureness from virtual callbacks - fixes OpenKinect#286
  Update CMakeLists.txt for v0.2.1
  wrappers/cpp: replace std::make_pair with and more compatible assignment - fixes OpenKinect#339
  wrappers/cpp: Stop loop before clearing devices (prevents hang on exit) - fixes OpenKinect#295
  OpenNI2-FreenectDriver: initial commit
  fakenect: Fix memory leaks - fixes OpenKinect#205
  csharp: Update Enumerations.cs - fixes OpenKinect#285
  Tweaks to freenect_flag commit
  Fix include of libusb.h in wrappers/cpp/libfreenect.hpp
  Make freenect_flags an actual flag enum
  Added Gentoo Linux ebuilds
  Added error reporting for failed subdevice initialization.
  Added a feature to use accelerometer data to rotate camera view in software when the camera is physically rotated such that the view on the screen is always upright even when the camera is upside down. Enabling it, and disabling it is done with the "r" key. Not on by default. I enabled several things that were disabled in the last patch, but only when rotation mode is toggled on.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant