Hello community,

here is the log from the commit of package ode for openSUSE:Factory checked in 
at 2020-09-17 15:06:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ode (Old)
 and      /work/SRC/openSUSE:Factory/.ode.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ode"

Thu Sep 17 15:06:17 2020 rev:6 rq:835158 version:0.16.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/ode/ode.changes  2020-03-30 23:07:32.780318123 
+0200
+++ /work/SRC/openSUSE:Factory/.ode.new.4249/ode.changes        2020-09-17 
15:09:11.120957532 +0200
@@ -1,0 +2,5 @@
+Thu Sep 17 07:49:16 UTC 2020 - Jannik Seiler <[email protected]>
+
+- Update to 0.16.2: minor bug and compatibility fixes
+
+-------------------------------------------------------------------

Old:
----
  ode-0.16.1.tar.gz

New:
----
  ode-0.16.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ode.spec ++++++
--- /var/tmp/diff_new_pack.kBqDnJ/_old  2020-09-17 15:09:11.980958349 +0200
+++ /var/tmp/diff_new_pack.kBqDnJ/_new  2020-09-17 15:09:11.984958353 +0200
@@ -19,7 +19,7 @@
 %define so_maj  8
 %define lname   libode%{so_maj}
 Name:           ode
-Version:        0.16.1
+Version:        0.16.2
 Release:        0
 Summary:        Open Dynamics Engine Library
 License:        BSD-3-Clause OR LGPL-2.1-or-later

++++++ ode-0.16.1.tar.gz -> ode-0.16.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/CHANGELOG.txt new/ode-0.16.2/CHANGELOG.txt
--- old/ode-0.16.1/CHANGELOG.txt        2020-02-19 11:51:04.000000000 +0100
+++ new/ode-0.16.2/CHANGELOG.txt        2020-07-30 15:27:35.000000000 +0200
@@ -8,6 +8,12 @@
   * keep the format consistent (79 char width, M/D/Y date format).
 
 ------------------------------------------------------------------------------
+07/28/2020 Oleh Derevenko
+        * A threaded job data race fixed on job release (issue #70). 
+          The bug could cause writes to functions's stack area after 
+          the function returned and World simulation errors not being reported
+          with the function result if the simulation failed.
+
 11/12/2018 Oleh Derevenko
         * The commentary from 11/05/2018 was wrong. The constraints were not
           reset to their natural order and remained randomized.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/CMakeLists.txt 
new/ode-0.16.2/CMakeLists.txt
--- old/ode-0.16.1/CMakeLists.txt       2020-02-19 11:51:04.000000000 +0100
+++ new/ode-0.16.2/CMakeLists.txt       2020-07-30 15:27:35.000000000 +0200
@@ -9,7 +9,7 @@
 
 set(VERSION_MAJOR 0)
 set(VERSION_MINOR 16)
-set(VERSION_PATCH 1)
+set(VERSION_PATCH 2)
 set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
 
 option(BUILD_SHARED_LIBS "Build shared libraries." ON)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/build/premake4.lua 
new/ode-0.16.2/build/premake4.lua
--- old/ode-0.16.1/build/premake4.lua   2020-02-19 11:51:04.000000000 +0100
+++ new/ode-0.16.2/build/premake4.lua   2020-07-30 15:27:35.000000000 +0200
@@ -4,7 +4,7 @@
 -- For more information on Premake: http://industriousone.com/premake
 ----------------------------------------------------------------------
 
-  ode_version = "0.16.1"
+  ode_version = "0.16.2"
 
 ----------------------------------------------------------------------
 -- Demo list: add/remove demos from here and the rest of the build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/configure new/ode-0.16.2/configure
--- old/ode-0.16.1/configure    2020-02-19 11:51:38.000000000 +0100
+++ new/ode-0.16.2/configure    2020-07-30 15:28:42.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ODE 0.16.1.
+# Generated by GNU Autoconf 2.69 for ODE 0.16.2.
 #
 # Report bugs to <[email protected]>.
 #
@@ -589,8 +589,8 @@
 # Identity of this package.
 PACKAGE_NAME='ODE'
 PACKAGE_TARNAME='ode'
-PACKAGE_VERSION='0.16.1'
-PACKAGE_STRING='ODE 0.16.1'
+PACKAGE_VERSION='0.16.2'
+PACKAGE_STRING='ODE 0.16.2'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1426,7 +1426,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ODE 0.16.1 to adapt to many kinds of systems.
+\`configure' configures ODE 0.16.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1497,7 +1497,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ODE 0.16.1:";;
+     short | recursive ) echo "Configuration of ODE 0.16.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1662,7 +1662,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ODE configure 0.16.1
+ODE configure 0.16.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2336,7 +2336,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ODE $as_me 0.16.1, which was
+It was created by ODE $as_me 0.16.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2684,7 +2684,7 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-ODE_VERSION=0.16.1
+ODE_VERSION=0.16.2
 
 
 # Those are instructions from the Libtool manual:
@@ -2707,7 +2707,7 @@
 #  6. If any interfaces have been removed since the last public release,
 #     then set AGE to 0.
 CURRENT=8
-REVISION=1
+REVISION=2
 AGE=0
 
 # Check whether --enable-version-info was given.
@@ -3316,7 +3316,7 @@
 
 # Define the identity of the package.
  PACKAGE='ode'
- VERSION='0.16.1'
+ VERSION='0.16.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -19355,7 +19355,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ODE $as_me 0.16.1, which was
+This file was extended by ODE $as_me 0.16.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19421,7 +19421,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ODE config.status 0.16.1
+ODE config.status 0.16.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/configure.ac new/ode-0.16.2/configure.ac
--- old/ode-0.16.1/configure.ac 2020-02-19 11:51:04.000000000 +0100
+++ new/ode-0.16.2/configure.ac 2020-07-30 15:27:35.000000000 +0200
@@ -1,6 +1,6 @@
 dnl AC_INIT does not take a macro as a version nr: set it separately! - Bram
-AC_INIT([ODE],[0.16.1],[[email protected]])
-ODE_VERSION=0.16.1
+AC_INIT([ODE],[0.16.2],[[email protected]])
+ODE_VERSION=0.16.2
 AC_SUBST(ODE_VERSION)
 
 # Those are instructions from the Libtool manual:
@@ -23,7 +23,7 @@
 #  6. If any interfaces have been removed since the last public release,
 #     then set AGE to 0.
 CURRENT=8
-REVISION=1
+REVISION=2
 AGE=0
 
 AC_ARG_ENABLE(version-info,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/include/ode/version.h 
new/ode-0.16.2/include/ode/version.h
--- old/ode-0.16.1/include/ode/version.h        2020-02-19 11:52:05.000000000 
+0100
+++ new/ode-0.16.2/include/ode/version.h        2020-07-30 15:28:56.000000000 
+0200
@@ -1,6 +1,6 @@
 #ifndef _ODE_VERSION_H_
 #define _ODE_VERSION_H_
 
-#define dODE_VERSION "0.16.1"
+#define dODE_VERSION "0.16.2"
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/ode/doc/Makefile.in 
new/ode-0.16.2/ode/doc/Makefile.in
--- old/ode-0.16.1/ode/doc/Makefile.in  2020-02-19 11:51:38.000000000 +0100
+++ new/ode-0.16.2/ode/doc/Makefile.in  2020-07-30 15:28:42.000000000 +0200
@@ -374,8 +374,8 @@
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
-@HAVE_DOXYGEN_FALSE@html-local:
 @HAVE_DOXYGEN_FALSE@mostlyclean-local:
+@HAVE_DOXYGEN_FALSE@html-local:
 clean: clean-am
 
 clean-am: clean-generic clean-libtool mostlyclean-am
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/ode/src/collision_quadtreespace.cpp 
new/ode-0.16.2/ode/src/collision_quadtreespace.cpp
--- old/ode-0.16.1/ode/src/collision_quadtreespace.cpp  2020-02-19 
11:50:49.000000000 +0100
+++ new/ode-0.16.2/ode/src/collision_quadtreespace.cpp  2020-07-30 
15:26:48.000000000 +0200
@@ -265,15 +265,21 @@
 
 void Block::DelObject(dGeomID Object){
     // Del the geom
-    dxGeom* g = mFirst;
-    dxGeom* Last = 0;
-    while (g){
-        if (g == Object){
-            if (Last){
-                Last->next_ex = g->next_ex;
-            }
-            else mFirst = g->next_ex;
+    dxGeom *Last, *g = mFirst;
+    bool Found = false;
 
+    if (g == Object){
+        mFirst = g->next_ex;
+        Found = true;
+    }
+    else {
+        Last = g;
+        g = g->next_ex;
+    }
+
+    for (; !Found && g; Found = false){
+        if (g == Object){
+            Last->next_ex = g->next_ex;
             break;
         }
         Last = g;
@@ -281,6 +287,7 @@
     }
 
     Object->tome_ex = 0;
+    dUASSERT((Object->next_ex = 0, true), "Needed for an assertion check 
only");
 
     // Now traverse upwards to tell that we have lost a geom
     Block* Block = this;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/ode/src/collision_sapspace.cpp 
new/ode-0.16.2/ode/src/collision_sapspace.cpp
--- old/ode-0.16.1/ode/src/collision_sapspace.cpp       2020-02-19 
11:50:49.000000000 +0100
+++ new/ode-0.16.2/ode/src/collision_sapspace.cpp       2020-07-30 
15:26:48.000000000 +0200
@@ -351,6 +351,9 @@
         GeomList.setSize( geomSize-1 );
     }
 
+    g->tome_ex = 0;
+    dUASSERT((g->next_ex = 0, true), "Needed for an assertion check only");
+
     dxSpace::remove(g);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/ode/src/joints/pu.cpp 
new/ode-0.16.2/ode/src/joints/pu.cpp
--- old/ode-0.16.1/ode/src/joints/pu.cpp        2020-02-19 11:50:49.000000000 
+0100
+++ new/ode-0.16.2/ode/src/joints/pu.cpp        2020-07-30 15:26:48.000000000 
+0200
@@ -140,12 +140,15 @@
         // anchor point.
 
         // r will be used to find the distance between body1 and the anchor 
point
-        dVector3 r;
-        dVector3 anchor2 = {0,0,0};
+        dVector3 r, anchor2;
+
         if ( joint->node[1].body )
         {
             // Find joint->anchor2 in global coordinates
-            dMultiply0_331( anchor2, joint->node[1].body->posr.R, 
joint->anchor2 );
+            
+            // NOTE! anchor2 needs a volatile assignment on the multiplication 
to discard computation errors.
+            // Otherwise, tests fail for single type on x86.
+            dxTruncToType::dMultiply0_331(anchor2, 
joint->node[1].body->posr.R, joint->anchor2);
 
             r[0] = ( joint->node[0].body->posr.pos[0] -
                 ( anchor2[0] + joint->node[1].body->posr.pos[0] ) );
@@ -156,6 +159,8 @@
         }
         else
         {
+            dZeroVector3(anchor2);
+
             //N.B. When there is no body 2 the joint->anchor2 is already in
             //     global coordinates
             // r = joint->node[0].body->posr.pos -  joint->anchor2;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/ode/src/odemath.h 
new/ode-0.16.2/ode/src/odemath.h
--- old/ode-0.16.1/ode/src/odemath.h    2020-02-19 11:50:49.000000000 +0100
+++ new/ode-0.16.2/ode/src/odemath.h    2020-07-30 15:26:48.000000000 +0200
@@ -69,4 +69,29 @@
 #define dOrthogonalizeR(m) dxOrthogonalizeR(m)
 
 
+//////////////////////////////////////////////////////////////////////////
+
+namespace dxTruncToType
+{
+
+ODE_PURE_INLINE 
+void _dMultiplyHelper0_331(volatile dReal *res, const dReal *a, const dReal *b)
+{
+    const dReal res_0 = dCalcVectorDot3(a, b);
+    const dReal res_1 = dCalcVectorDot3(a + 4, b);
+    const dReal res_2 = dCalcVectorDot3(a + 8, b);
+    /* Only assign after all the calculations are over to avoid incurring 
memory aliasing*/
+    res[0] = res_0; res[1] = res_1; res[2] = res_2;
+}
+
+ODE_PURE_INLINE 
+void dMultiply0_331(volatile dReal *res, const dReal *a, const dReal *b)
+{
+    _dMultiplyHelper0_331(res, a, b);
+}
+
+
+}; // namespace dxTruncToType
+
+
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ode-0.16.1/ode/src/threading_impl_templates.h 
new/ode-0.16.2/ode/src/threading_impl_templates.h
--- old/ode-0.16.1/ode/src/threading_impl_templates.h   2020-02-19 
11:51:04.000000000 +0100
+++ new/ode-0.16.2/ode/src/threading_impl_templates.h   2020-07-30 
15:27:35.000000000 +0200
@@ -660,19 +660,24 @@
             break;
         }
 
-        void *job_call_wait = current_job->m_call_wait;
-
-        if (job_call_wait != NULL)
-        {
-            wait_signal_proc_ptr(job_call_wait);
-        }
-
         int call_fault = current_job->m_call_fault;
 
+        // Assign the accumulated fault state first...
         if (current_job->m_fault_accumulator_ptr)
         {
             *current_job->m_fault_accumulator_ptr = call_fault;
         }
+        
+        // ...and only then release the entity waiting on the job.
+        // The entity can be waiting for the fault state 
+        // and may start accessing it and/or dispose the storage 
+        // immediately after having been awakened.
+        void *job_call_wait = current_job->m_call_wait;
+
+        if (job_call_wait != NULL)
+        {
+            wait_signal_proc_ptr(job_call_wait);
+        }
 
         dxThreadedJobInfo *dependent_job = current_job->m_dependent_job;
         ReleaseJobInfoIntoPool(current_job);


Reply via email to