diff --git a/doc/ReleaseNotes b/doc/ReleaseNotes index 90c661c63a..a4a0b49a02 100644 --- a/doc/ReleaseNotes +++ b/doc/ReleaseNotes @@ -1,3 +1,21 @@ +------------------------ RELEASE 1.9.3 ------------------------ + +This issue fixes several bugs that were still found in 1.9.2. + +* Fix crash when running in Steam on Linux when using OpenAL +* Fix crash using wx/tkinter on Mac as long as want-wx/tk is set +* Fix loading models from 'models' package with models/ prefix +* Fix random crashes in task system +* Fix memory leaks in BulletTriangleMesh +* Fix loading old models with MovingPart +* Improve performance of CPU vertex animation somewhat +* Show framebuffer properties when fbprop request fails +* Fix hang on exit when using Python task on threaded task chain +* Fix inability to get RGBA renderbuffer in certain cases +* Work around GLSL issue with #pragma and certain Intel drivers +* Improve performance of texture load and store operations +* Fix crashes with pbuffers on Intel cards on Windows + ------------------------ RELEASE 1.9.2 ------------------------ This is a minor bugfix release, fixing a few minor issues that diff --git a/panda/src/display/graphicsEngine.cxx b/panda/src/display/graphicsEngine.cxx index 7052db532c..ac2c194195 100644 --- a/panda/src/display/graphicsEngine.cxx +++ b/panda/src/display/graphicsEngine.cxx @@ -597,6 +597,9 @@ remove_all_windows() { // And, hey, let's stop the vertex paging threads, if any. VertexDataPage::stop_threads(); + // Stopping the tasks means we have to release the Python GIL while + // this method runs (hence it is marked BLOCKING), so that any + // Python tasks on other threads won't deadlock grabbing the GIL. AsyncTaskManager::get_global_ptr()->stop_threads(); #ifdef DO_PSTATS diff --git a/panda/src/display/graphicsEngine.h b/panda/src/display/graphicsEngine.h index 1775b49e61..89cfb7c616 100644 --- a/panda/src/display/graphicsEngine.h +++ b/panda/src/display/graphicsEngine.h @@ -53,7 +53,7 @@ class Texture; class EXPCL_PANDA_DISPLAY GraphicsEngine : public ReferenceCount { PUBLISHED: GraphicsEngine(Pipeline *pipeline = NULL); - ~GraphicsEngine(); + BLOCKING ~GraphicsEngine(); void set_threading_model(const GraphicsThreadingModel &threading_model); GraphicsThreadingModel get_threading_model() const; @@ -94,7 +94,7 @@ PUBLISHED: bool add_window(GraphicsOutput *window, int sort); bool remove_window(GraphicsOutput *window); - void remove_all_windows(); + BLOCKING void remove_all_windows(); void reset_all_windows(bool swapchain); bool is_empty() const; diff --git a/panda/src/gobj/shader.cxx b/panda/src/gobj/shader.cxx index 4b7c396577..dede60afbc 100644 --- a/panda/src/gobj/shader.cxx +++ b/panda/src/gobj/shader.cxx @@ -1625,11 +1625,11 @@ cg_compile_entry_point(const char *entry, const ShaderCaps &caps, compiler_args[nargs++] = "ATI_draw_buffers"; } - char version_arg[16]; + string version_arg; if (!cg_glsl_version.empty() && active != CG_PROFILE_UNKNOWN && cgGetProfileProperty((CGprofile) active, CG_IS_GLSL_PROFILE)) { - string version_arg("version="); + version_arg = "version="; version_arg += cg_glsl_version; compiler_args[nargs++] = "-po"; diff --git a/panda/src/linmath/lvecBase2_src.I b/panda/src/linmath/lvecBase2_src.I index 7a8cddc5a0..9ddce8966c 100644 --- a/panda/src/linmath/lvecBase2_src.I +++ b/panda/src/linmath/lvecBase2_src.I @@ -393,9 +393,8 @@ INLINE_LINMATH size_t FLOATNAME(LVecBase2):: add_hash(size_t hash) const { TAU_PROFILE("size_t LVecBase2::add_hash(size_t)", " ", TAU_USER); #ifdef FLOATTYPE_IS_INT - int_hash ihasher; - hash = ihasher.add_hash(hash, _v(0)); - hash = ihasher.add_hash(hash, _v(1)); + hash = int_hash::add_hash(hash, _v(0)); + hash = int_hash::add_hash(hash, _v(1)); return hash; #else return add_hash(hash, NEARLY_ZERO(FLOATTYPE)); diff --git a/panda/src/linmath/lvecBase3_src.I b/panda/src/linmath/lvecBase3_src.I index ec9cc7be39..b7011da0ca 100644 --- a/panda/src/linmath/lvecBase3_src.I +++ b/panda/src/linmath/lvecBase3_src.I @@ -528,10 +528,9 @@ INLINE_LINMATH size_t FLOATNAME(LVecBase3):: add_hash(size_t hash) const { TAU_PROFILE("size_t LVecBase3::add_hash(size_t)", " ", TAU_USER); #ifdef FLOATTYPE_IS_INT - int_hash ihasher; - hash = ihasher.add_hash(hash, _v(0)); - hash = ihasher.add_hash(hash, _v(1)); - hash = ihasher.add_hash(hash, _v(2)); + hash = int_hash::add_hash(hash, _v(0)); + hash = int_hash::add_hash(hash, _v(1)); + hash = int_hash::add_hash(hash, _v(2)); return hash; #else return add_hash(hash, NEARLY_ZERO(FLOATTYPE)); diff --git a/panda/src/linmath/lvecBase4_src.I b/panda/src/linmath/lvecBase4_src.I index 6771e563ff..7890a6f8f0 100644 --- a/panda/src/linmath/lvecBase4_src.I +++ b/panda/src/linmath/lvecBase4_src.I @@ -521,11 +521,10 @@ INLINE_LINMATH size_t FLOATNAME(LVecBase4):: add_hash(size_t hash) const { TAU_PROFILE("size_t LVecBase4::add_hash(size_t)", " ", TAU_USER); #ifdef FLOATTYPE_IS_INT - int_hash ihasher; - hash = ihasher.add_hash(hash, _v(0)); - hash = ihasher.add_hash(hash, _v(1)); - hash = ihasher.add_hash(hash, _v(2)); - hash = ihasher.add_hash(hash, _v(3)); + hash = int_hash::add_hash(hash, _v(0)); + hash = int_hash::add_hash(hash, _v(1)); + hash = int_hash::add_hash(hash, _v(2)); + hash = int_hash::add_hash(hash, _v(3)); return hash; #else return add_hash(hash, NEARLY_ZERO(FLOATTYPE)); diff --git a/panda/src/pnmimagetypes/pnmFileTypeBMPReader.cxx b/panda/src/pnmimagetypes/pnmFileTypeBMPReader.cxx index 8d5336b75b..5d33812216 100644 --- a/panda/src/pnmimagetypes/pnmFileTypeBMPReader.cxx +++ b/panda/src/pnmimagetypes/pnmFileTypeBMPReader.cxx @@ -226,7 +226,7 @@ BMPreadinfoheader( * for the required total. */ if (classv != C_OS2) { - for (int i = 0; i < cbFix - 16; i += 4) { + for (int i = 0; i < (int)cbFix - 16; i += 4) { GetLong(fp); } } diff --git a/panda/src/pnmimagetypes/pnmFileTypePNM.cxx b/panda/src/pnmimagetypes/pnmFileTypePNM.cxx index d1ada1a078..efbee9e646 100644 --- a/panda/src/pnmimagetypes/pnmFileTypePNM.cxx +++ b/panda/src/pnmimagetypes/pnmFileTypePNM.cxx @@ -649,10 +649,10 @@ writePackedRawRow(ostream * const fileP, const unsigned char * const packed_bits, int const cols) { - int bytesWritten; fileP->write((const char *)packed_bits, pbm_packed_bytes(cols)); - if (fileP->fail()) + if (fileP->fail()) { pm_error("I/O error writing packed row to raw PBM file."); + } } static void diff --git a/panda/src/rocket/rocketRegion_ext.cxx b/panda/src/rocket/rocketRegion_ext.cxx index adc73a219e..cb79f467a1 100644 --- a/panda/src/rocket/rocketRegion_ext.cxx +++ b/panda/src/rocket/rocketRegion_ext.cxx @@ -40,7 +40,8 @@ get_context() const { context->AddReference(); return py_context.ptr(); - } catch (const python::error_already_set& e) { + } catch (const python::error_already_set &e) { + (void)e; // Return NULL, which will trigger the exception in Python } return NULL;