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);
