From d2e93cc185ff9990e40c0da124250364d3cc2cd1 Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 25 May 2023 13:55:22 +0200 Subject: [PATCH 1/4] gobj: Fix post_load_store_cache field being uninitialized on cycle This is randomly causing textures to be downloaded, which can be a significant performance drain --- panda/src/gobj/texture.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 7edced0507..99c5d10c02 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -10711,6 +10711,7 @@ Texture::CData:: CData(const Texture::CData ©) { _num_mipmap_levels_read = 0; _render_to_texture = copy._render_to_texture; + _post_load_store_cache = copy._post_load_store_cache; do_assign(©); From b79d8efce69ec409e51b43736979d5afa95db233 Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 25 May 2023 14:11:51 +0200 Subject: [PATCH 2/4] Don't use RTTI features when building with `-fno-rtti` This should make it possible to use `-fno-rtti` in a C++ application even when Panda has been compiled with RTTI enabled. --- panda/src/express/nodeReferenceCount.I | 2 +- panda/src/express/referenceCount.I | 2 +- panda/src/putil/copyOnWriteObject.I | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/panda/src/express/nodeReferenceCount.I b/panda/src/express/nodeReferenceCount.I index d87bc982d8..66a8be1cea 100644 --- a/panda/src/express/nodeReferenceCount.I +++ b/panda/src/express/nodeReferenceCount.I @@ -213,7 +213,7 @@ NodeRefCountObj(const Base ©) : Base(copy) { template void NodeRefCountObj:: init_type() { -#if defined(HAVE_RTTI) && !defined(__EDG__) +#if defined(HAVE_RTTI) && !defined(__EDG__) && (!defined(__GNUC__) || defined(__GXX_RTTI)) // If we have RTTI, we can determine the name of the base type. std::string base_name = typeid(Base).name(); #else diff --git a/panda/src/express/referenceCount.I b/panda/src/express/referenceCount.I index f4d71b1117..870362ff14 100644 --- a/panda/src/express/referenceCount.I +++ b/panda/src/express/referenceCount.I @@ -424,7 +424,7 @@ RefCountObj(const Base ©) : Base(copy) { template void RefCountObj:: init_type() { -#if defined(HAVE_RTTI) && !defined(__EDG__) +#if defined(HAVE_RTTI) && !defined(__EDG__) && (!defined(__GNUC__) || defined(__GXX_RTTI)) // If we have RTTI, we can determine the name of the base type. std::string base_name = typeid(Base).name(); #else diff --git a/panda/src/putil/copyOnWriteObject.I b/panda/src/putil/copyOnWriteObject.I index bcf326d87c..a6afee7163 100644 --- a/panda/src/putil/copyOnWriteObject.I +++ b/panda/src/putil/copyOnWriteObject.I @@ -128,7 +128,7 @@ make_cow_copy() { template void CopyOnWriteObj:: init_type() { -#if defined(HAVE_RTTI) && !defined(__EDG__) +#if defined(HAVE_RTTI) && !defined(__EDG__) && (!defined(__GNUC__) || defined(__GXX_RTTI)) // If we have RTTI, we can determine the name of the base type. std::string base_name = typeid(Base).name(); #else @@ -188,7 +188,7 @@ make_cow_copy() { template void CopyOnWriteObj1:: init_type() { -#if defined(HAVE_RTTI) && !defined(__EDG__) +#if defined(HAVE_RTTI) && !defined(__EDG__) && (!defined(__GNUC__) || defined(__GXX_RTTI)) // If we have RTTI, we can determine the name of the base type. std::string base_name = typeid(Base).name(); #else From d4d4aefbce08335b8afb13109a7001263a874763 Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 8 Jun 2023 13:45:52 +0200 Subject: [PATCH 3/4] makepackage: Force creating .dmg as HFS+ for 10.9 compatibility Fixes #1502 [skip ci] --- makepanda/makepackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makepanda/makepackage.py b/makepanda/makepackage.py index 4e0a459488..f57fc873e3 100755 --- a/makepanda/makepackage.py +++ b/makepanda/makepackage.py @@ -832,7 +832,7 @@ def MakeInstallerOSX(version, runtime=False, python_versions=[], installdir=None dist.write('\n') dist.close() - oscmd('hdiutil create Panda3D-rw.dmg -volname "Panda3D SDK %s" -srcfolder dstroot/Panda3D' % (version)) + oscmd('hdiutil create Panda3D-rw.dmg -fs HFS+ -volname "Panda3D SDK %s" -srcfolder dstroot/Panda3D' % (version)) oscmd('hdiutil convert Panda3D-rw.dmg -format UDBZ -o %s' % (dmg_name)) oscmd('rm -f Panda3D-rw.dmg') From 94ebd7c953eb7ab048d3fd239374d6d4d7284a97 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 12 Jun 2023 09:54:25 +0200 Subject: [PATCH 4/4] pstats: Fix exception when `__module__` is a descriptor This comes up when using metaclasses Fixes #1505 --- panda/src/pstatclient/pStatClient_ext.cxx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/panda/src/pstatclient/pStatClient_ext.cxx b/panda/src/pstatclient/pStatClient_ext.cxx index db4b573c26..684ac1db2a 100644 --- a/panda/src/pstatclient/pStatClient_ext.cxx +++ b/panda/src/pstatclient/pStatClient_ext.cxx @@ -181,10 +181,23 @@ make_c_function_collector(PyCFunctionObject *meth) { } else { // If there's no module name, we need to get it from __module__. PyObject *py_mod_name = cls->tp_dict ? PyDict_GetItemString(cls->tp_dict, "__module__") : nullptr; - const char *mod_name; + const char *mod_name = nullptr; if (py_mod_name != nullptr) { - mod_name = PyUnicode_AsUTF8(py_mod_name); - } else { + if (PyUnicode_Check(py_mod_name)) { + mod_name = PyUnicode_AsUTF8(py_mod_name); + } else { + // Might be a descriptor. + py_mod_name = PyObject_GetAttrString(meth->m_self, "__module__"); + if (py_mod_name != nullptr) { + if (PyUnicode_Check(py_mod_name)) { + mod_name = PyUnicode_AsUTF8(py_mod_name); + } + Py_DECREF(py_mod_name); + } + else PyErr_Clear(); + } + } + if (mod_name == nullptr) { // Is it a built-in, like int or dict? PyObject *builtins = PyEval_GetBuiltins(); if (PyDict_GetItemString(builtins, cls->tp_name) == (PyObject *)cls) {