Hello community,

here is the log from the commit of package wicked for openSUSE:Factory checked 
in at 2018-10-11 11:44:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wicked (Old)
 and      /work/SRC/openSUSE:Factory/.wicked.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wicked"

Thu Oct 11 11:44:06 2018 rev:71 rq:640060 version:0.6.50

Changes:
--------
--- /work/SRC/openSUSE:Factory/wicked/wicked.changes    2018-10-01 
09:05:12.599903514 +0200
+++ /work/SRC/openSUSE:Factory/.wicked.new/wicked.changes       2018-10-11 
11:44:48.450836009 +0200
@@ -1,0 +2,24 @@
+Fri Oct  5 11:06:49 UTC 2018 - rtorreromarijnis...@suse.com
+
+- version 0.6.50
+- firewall: do not assign default zone, but pass as is (bsc#1109147)
+- nanny: fix memory leaks on fast create-delete calls (bsc#1095818)
+  + fsm: cleanup worker reset (reinit) vs. free
+  + fsm: do not process or pass pending workers to nanny
+  + nanny: catch init failures in device registration
+  + netdev: allow NULL in get and put functions
+  + model: fix to call (netif) dbus object destructors
+  + model: removed server specific call in netif destroy
+  + fsm: handle NULL in worker get and release calls
+  + fsm: process device delete event separately
+  + calls: split get netif service and netif list utils
+  + xml-schema: fix range constraint values parsing
+  + xml-schema: remove underscores from ni_xs_type_new
+  + xml-schema: fix type leak around ni_xs_build_one_type
+  + fsm: free worker control mode on worker free
+  + xpath: trace and free complete xpath expression tree
+  + nanny: fix config leak in ni_nanny_recheck_policy
+  + dbus: free pending call in ni_dbus_connection_call
+  + dbus: free dbus_message_iter_get_signature result
+
+-------------------------------------------------------------------

Old:
----
  wicked-0.6.49.tar.bz2

New:
----
  wicked-0.6.50.tar.bz2

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

Other differences:
------------------
++++++ wicked.spec ++++++
--- /var/tmp/diff_new_pack.Y6lc2d/_old  2018-10-11 11:44:49.058835235 +0200
+++ /var/tmp/diff_new_pack.Y6lc2d/_new  2018-10-11 11:44:49.058835235 +0200
@@ -18,7 +18,7 @@
 
 %define                release_prefix  %{?snapshot:%{snapshot}}%{!?snapshot:0}
 Name:           wicked
-Version:        0.6.49
+Version:        0.6.50
 Release:        %{release_prefix}.0.0
 Summary:        Network configuration infrastructure
 License:        GPL-2.0

++++++ wicked-0.6.49.tar.bz2 -> wicked-0.6.50.tar.bz2 ++++++
++++ 29473 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/ChangeLog new/wicked-0.6.50/ChangeLog
--- old/wicked-0.6.49/ChangeLog 2018-09-21 16:23:58.000000000 +0200
+++ new/wicked-0.6.50/ChangeLog 2018-10-04 14:29:17.000000000 +0200
@@ -1,3 +1,141 @@
+commit e6e00395dfe3c6b789dd8ab22088e76ad9d99f6d
+Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com>
+Date:   Thu Oct 4 13:23:54 2018 +0100
+
+    version 0.6.50
+
+commit c68d69da192cd4530319bb22987fa9626328ba5d
+Merge: 9ee99d89 51733759
+Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com>
+Date:   Thu Oct 4 11:56:36 2018 +0100
+
+    Merge pull request #775 from mtomaschewski/nanny-leaks
+    
+    nanny: fix memory leaks on fast create-delete calls (bsc#1095818)
+
+commit 51733759211289282cada610f48d883e9c3b5b6c
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:51:37 2018 +0200
+
+    fsm: cleanup worker reset (reinit) vs. free
+
+commit 4f62a0874081720f2ccd163da0a9ec622b6bc77d
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:43:55 2018 +0200
+
+    fsm: do not process or pass pending workers to nanny
+
+commit 6b082524fa2024c3de8036ac93dfd6d4166ba61b
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:37:14 2018 +0200
+
+    nanny: catch init failures in device registration
+
+commit 9ee99d89e9c69725fc3493d7538cfa48364b8a05
+Merge: de7b8525 01bc2939
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Wed Oct 3 12:27:25 2018 +0200
+
+    Merge pull request #774 from rtorrero/firewall-def-zone
+    
+    firewall: do not assign default zone, but pass as is (bsc#1109147)
+
+commit f4bb5e9c6a1d3aa8efe48b01cf5d56cc8b8e66c2
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:32:53 2018 +0200
+
+    netdev: allow NULL in get and put functions
+
+commit e2e9ee01c9a7b131867fab67d9a524db841c8e69
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:30:07 2018 +0200
+
+    model: fix to call (netif) dbus object destructors
+
+commit 2423eb77e4e31c223fd6c99c74419e09890b73a2
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:26:03 2018 +0200
+
+    model: removed server specific call in netif destroy
+
+commit 5284f9444abea52279ad6783de0378c9ef215105
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:23:07 2018 +0200
+
+    fsm: handle NULL in worker get and release calls
+
+commit e4a7c38721cadba1c6875307ba4e607e2b62443a
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Tue Oct 2 01:20:41 2018 +0200
+
+    fsm: process device delete event separately
+
+commit 01bc2939a95d1c10e75a7c82bac666ba5dad54ab
+Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com>
+Date:   Mon Oct 1 13:08:54 2018 +0100
+
+    firewall: do not assign default zone, but pass as is (bsc#1109147)
+
+commit 4975c4f49c1eb9d5f75b6bf5f546e95f9c03b897
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 18:27:13 2018 +0200
+
+    calls: split get netif service and netif list utils
+
+commit dba165a988be05720a197b2aaf065a5cd2390ec5
+Author: Eclipse Webmaster team <webmas...@eclipse.org>
+Date:   Wed Sep 26 14:34:51 2018 -0400
+
+    Fix Typos
+
+commit 64d62c35c88b205be1f67c23892408670feb28b0
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:46:24 2018 +0200
+
+    xml-schema: fix range constraint values parsing
+
+commit 4075e5069c75ae8f27b187808d9737eac1a8f67f
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:42:39 2018 +0200
+
+    xml-schema: remove underscores from ni_xs_type_new
+
+commit a62dfe5ead79a941f34aca834d8f2fa2e3faa77e
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:38:58 2018 +0200
+
+    xml-schema: fix type leak around ni_xs_build_one_type
+
+commit 8d69167f0e51a9f363226833faa1a1be4d7317f6
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:16:15 2018 +0200
+
+    fsm: free worker control mode on worker free
+
+commit b0f3df40890c7a45f0b7248f143c69fa93f3a341
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:14:43 2018 +0200
+
+    xpath: trace and free complete xpath expression tree
+
+commit e561f4c8fc0e5df9115dd3eb0bd8f94f4ac31946
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:10:18 2018 +0200
+
+    nanny: fix config leak in ni_nanny_recheck_policy
+
+commit 23d248d98078597a3ded18175b2c4c2e74356451
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:09:25 2018 +0200
+
+    dbus: free pending call in ni_dbus_connection_call
+
+commit 84a7b68b7a219a5c5a6f719c25dc686de6664e97
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Mon Sep 24 14:06:01 2018 +0200
+
+    dbus: free dbus_message_iter_get_signature result
+
 commit 350a23bfe13fd29e9b2b503e916e7aeade27175d
 Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com>
 Date:   Fri Sep 21 14:05:09 2018 +0100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/VERSION new/wicked-0.6.50/VERSION
--- old/wicked-0.6.49/VERSION   2018-09-21 15:52:42.000000000 +0200
+++ new/wicked-0.6.50/VERSION   2018-10-04 14:23:47.000000000 +0200
@@ -1 +1 @@
-0.6.49
+0.6.50
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/compile new/wicked-0.6.50/compile
--- old/wicked-0.6.49/compile   1970-01-01 01:00:00.000000000 +0100
+++ new/wicked-0.6.50/compile   2018-10-04 14:28:56.000000000 +0200
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Written by Tom Tromey <tro...@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-autom...@gnu.org> or send patches to
+# <automake-patc...@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""       $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+       # lazily determine how to convert abs files
+       case `uname -s` in
+         MINGW*)
+           file_conv=mingw
+           ;;
+         CYGWIN*)
+           file_conv=cygwin
+           ;;
+         *)
+           file_conv=wine
+           ;;
+       esac
+      fi
+      case $file_conv/,$2, in
+       *,$file_conv,*)
+         ;;
+       mingw/*)
+         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+         ;;
+       cygwin/*)
+         file=`cygpath -m "$file" || echo "$file"`
+         ;;
+       wine/*)
+         file=`winepath -w "$file" || echo "$file"`
+         ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+       -o)
+         # configure might choose to run compile as 'compile cc -o foo foo.c'.
+         eat=1
+         case $2 in
+           *.o | *.[oO][bB][jJ])
+             func_file_conv "$2"
+             set x "$@" -Fo"$file"
+             shift
+             ;;
+           *)
+             func_file_conv "$2"
+             set x "$@" -Fe"$file"
+             shift
+             ;;
+         esac
+         ;;
+       -I)
+         eat=1
+         func_file_conv "$2" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -I*)
+         func_file_conv "${1#-I}" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -l)
+         eat=1
+         func_cl_dashl "$2"
+         set x "$@" "$lib"
+         shift
+         ;;
+       -l*)
+         func_cl_dashl "${1#-l}"
+         set x "$@" "$lib"
+         shift
+         ;;
+       -L)
+         eat=1
+         func_cl_dashL "$2"
+         ;;
+       -L*)
+         func_cl_dashL "${1#-L}"
+         ;;
+       -static)
+         shared=false
+         ;;
+       -Wl,*)
+         arg=${1#-Wl,}
+         save_ifs="$IFS"; IFS=','
+         for flag in $arg; do
+           IFS="$save_ifs"
+           linker_opts="$linker_opts $flag"
+         done
+         IFS="$save_ifs"
+         ;;
+       -Xlinker)
+         eat=1
+         linker_opts="$linker_opts $2"
+         ;;
+       -*)
+         set x "$@" "$1"
+         shift
+         ;;
+       *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+         func_file_conv "$1"
+         set x "$@" -Tp"$file"
+         shift
+         ;;
+       *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+         func_file_conv "$1" mingw
+         set x "$@" "$file"
+         shift
+         ;;
+       *)
+         set x "$@" "$1"
+         shift
+         ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-autom...@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as 'compile cc -o foo foo.c'.
+       # So we strip '-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/config.h.in new/wicked-0.6.50/config.h.in
--- old/wicked-0.6.49/config.h.in       2018-09-21 16:23:50.000000000 +0200
+++ new/wicked-0.6.50/config.h.in       2018-10-04 14:28:55.000000000 +0200
@@ -182,8 +182,7 @@
 /* Define to 1 if `vfork' works. */
 #undef HAVE_WORKING_VFORK
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
 /* Enable to use rfc4361 DHCPv4 client-id by default */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/extensions/firewall new/wicked-0.6.50/extensions/firewall
--- old/wicked-0.6.49/extensions/firewall       2018-09-21 15:52:42.000000000 
+0200
+++ new/wicked-0.6.50/extensions/firewall       2018-10-04 14:23:19.000000000 
+0200
@@ -66,10 +66,7 @@
        test "X$WICKED_INTERFACE_NAME" = "X" && return 1
 
        local ZONE=`wicked_config_get_zone "$WICKED_ARGFILE"`
-       if test "X$ZONE" = "X" ; then
-               ZONE=`"$firewalld_cmd" --get-default-zone 2>/dev/null`
-               test "X$ZONE" = "X" && return 1
-       fi
+
        "$firewalld_cmd" --zone="$ZONE" 
--change-interface="$WICKED_INTERFACE_NAME" &>/dev/null
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/include/wicked/fsm.h new/wicked-0.6.50/include/wicked/fsm.h
--- old/wicked-0.6.49/include/wicked/fsm.h      2017-07-28 14:41:47.000000000 
+0200
+++ new/wicked-0.6.50/include/wicked/fsm.h      2018-10-04 14:23:19.000000000 
+0200
@@ -392,15 +392,27 @@
 static inline ni_ifworker_t *
 ni_ifworker_get(ni_ifworker_t *w)
 {
-       w->refcount++;
+       if (w) {
+               ni_assert(w->refcount);
+               w->refcount++;
+       }
        return w;
 }
 
-static inline void
-ni_ifworker_release(ni_ifworker_t *state)
+static inline unsigned int
+ni_ifworker_release(ni_ifworker_t *w)
 {
-       if (--(state->refcount) == 0)
-               ni_ifworker_free(state);
+       if (w) {
+               ni_assert(w->refcount);
+               w->refcount--;
+
+               if (w->refcount == 0) {
+                       ni_ifworker_free(w);
+               } else {
+                       return w->refcount;
+               }
+       }
+       return 0;
 }
 
 static inline ni_bool_t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/include/wicked/netinfo.h 
new/wicked-0.6.50/include/wicked/netinfo.h
--- old/wicked-0.6.49/include/wicked/netinfo.h  2018-09-21 15:52:42.000000000 
+0200
+++ new/wicked-0.6.50/include/wicked/netinfo.h  2018-10-04 14:23:19.000000000 
+0200
@@ -182,7 +182,7 @@
 
 extern ni_netdev_t *   ni_netdev_new(const char *name, unsigned int ifindex);
 extern ni_netdev_t *   ni_netdev_get(ni_netdev_t *ifp);
-extern int             ni_netdev_put(ni_netdev_t *ifp);
+extern unsigned int    ni_netdev_put(ni_netdev_t *ifp);
 extern int             ni_netdev_update(ni_netdev_t *ifp);
 extern int             ni_netdev_guess_type(ni_netdev_t *ifp);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/man/wicked.8.in new/wicked-0.6.50/man/wicked.8.in
--- old/wicked-0.6.49/man/wicked.8.in   2018-09-21 15:52:42.000000000 +0200
+++ new/wicked-0.6.50/man/wicked.8.in   2018-10-04 14:23:19.000000000 +0200
@@ -371,12 +371,12 @@
 .TP
 .BI "\-\-quiet "
 Used to obtain status return codes only. No information is output,
-so can be used for scrpiting.
+so can be used for scripting.
 .TP
 .BI "\-\-brief "
 Displays device status for specified interfaces.
 .TP
-.BI "\-\-ifconfig " filenam
+.BI "\-\-ifconfig " filename
 Note that this is ifstatus specfic (ie. root only).
 Used to alter the source of the specified interface configurations.
 .PP
@@ -417,7 +417,7 @@
 .TP
 .BI "\-\-quiet "
 Used to obtain status return codes only. No information is output,
-so can be used for scrpiting.
+so can be used for scripting.
 .TP
 .BI "\-\-missed "
 Check if the interface is missed.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/missing new/wicked-0.6.50/missing
--- old/wicked-0.6.49/missing   2018-09-21 16:23:51.000000000 +0200
+++ new/wicked-0.6.50/missing   2018-10-04 14:28:56.000000000 +0200
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2012-06-26.16; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pin...@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -101,9 +101,9 @@
   exit $st
 fi
 
-perl_URL=http://www.perl.org/
-flex_URL=http://flex.sourceforge.net/
-gnu_software_URL=http://www.gnu.org/software
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
 
 program_details ()
 {
@@ -160,7 +160,7 @@
       ;;
    autom4te*)
       echo "You might have modified some maintainer files that require"
-      echo "the 'automa4te' program to be rebuilt."
+      echo "the 'autom4te' program to be rebuilt."
       program_details 'autom4te'
       ;;
     bison*|yacc*)
@@ -207,9 +207,9 @@
 exit $st
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/nanny/interface.c new/wicked-0.6.50/nanny/interface.c
--- old/wicked-0.6.49/nanny/interface.c 2015-10-05 19:14:29.000000000 +0200
+++ new/wicked-0.6.50/nanny/interface.c 2018-10-04 14:23:19.000000000 +0200
@@ -108,7 +108,9 @@
        if (!(w = ni_managed_device_get_worker(mdev)))
                return NULL;
 
-       dev = ni_ifworker_get_netdev(w);
+       if (!(dev = ni_ifworker_get_netdev(w)))
+               return NULL;
+
        snprintf(relative_path, sizeof(relative_path), "Interface/%u", 
dev->link.ifindex);
        object = ni_dbus_server_register_object(server, relative_path, 
&ni_objectmodel_managed_netdev_class, mdev);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/nanny/nanny.c new/wicked-0.6.50/nanny/nanny.c
--- old/wicked-0.6.49/nanny/nanny.c     2018-09-21 15:52:42.000000000 +0200
+++ new/wicked-0.6.50/nanny/nanny.c     2018-10-04 14:23:19.000000000 +0200
@@ -449,16 +449,19 @@
        if (ni_nanny_get_device(mgr, w) != NULL)
                return;
 
-       mdev = ni_managed_device_new(mgr, w->ifindex, &mgr->device_list);
+       if (!(mdev = ni_managed_device_new(mgr, w->ifindex, &mgr->device_list)))
+               return;
+
        if (w->type == NI_IFWORKER_TYPE_NETDEV) {
-               mdev->object = 
ni_objectmodel_register_managed_netdev(mgr->server, mdev);
-               dev_class = ni_objectmodel_link_class(w->device->link.type);
+               if ((mdev->object = 
ni_objectmodel_register_managed_netdev(mgr->server, mdev)))
+                       dev_class = 
ni_objectmodel_link_class(w->device->link.type);
        } else
        if (w->type == NI_IFWORKER_TYPE_MODEM) {
-               mdev->object = 
ni_objectmodel_register_managed_modem(mgr->server, mdev);
-               dev_class = ni_objectmodel_modem_get_class(w->modem->type);
+               if ((mdev->object = 
ni_objectmodel_register_managed_modem(mgr->server, mdev)))
+                       dev_class = 
ni_objectmodel_modem_get_class(w->modem->type);
        }
-
+       if (!mdev->object || !dev_class)
+               return;
 
        for (match = mgr->enable; match; match = match->next) {
                switch (match->type) {
@@ -481,7 +484,7 @@
        }
 
        ni_debug_nanny("new device %s, class %s%s%s", w->name,
-                       mdev->object->class->name,
+                       mdev->object->class ? mdev->object->class->name : NULL,
                        mdev->allowed? ", user control allowed" : "",
                        mdev->monitor? ", monitored (auto-enabled)" : "");
 
@@ -1064,6 +1067,7 @@
                                        ni_fsm_policy_name(policy), origin);
                        return FALSE;
                }
+               xml_node_free(config);
        }
        if (w == NULL) {
                w = ni_fsm_ifworker_by_policy_name(mgr->fsm, 
NI_IFWORKER_TYPE_NETDEV,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/calls.c new/wicked-0.6.50/src/calls.c
--- old/wicked-0.6.49/src/calls.c       2015-10-05 19:14:29.000000000 +0200
+++ new/wicked-0.6.50/src/calls.c       2018-10-04 14:23:19.000000000 +0200
@@ -89,22 +89,38 @@
 }
 
 /*
- * Obtain an object handle for Wicked.Interface
+ * Obtain a service handle for Wicked.InterfacaList
+ */
+static const ni_dbus_service_t *
+ni_call_get_netif_list_service(void)
+{
+       static const ni_dbus_service_t *list_service = NULL;
+
+       if (list_service)
+              return list_service;
+
+       list_service = 
ni_objectmodel_service_by_name(NI_OBJECTMODEL_NETIFLIST_INTERFACE);
+       return list_service;
+}
+
+/*
+ * Obtain an object handle for Wicked.InterfaceList
  */
 ni_dbus_object_t *
 ni_call_get_netif_list_object(void)
 {
-       static const ni_dbus_service_t *netif_list_service;
-       ni_dbus_object_t *list_object;
+       static ni_dbus_object_t *list_object = NULL;
+       const ni_dbus_service_t *list_service;
+
+       if (list_object)
+               return list_object;
 
-       if (netif_list_service == NULL) {
-               netif_list_service = 
ni_objectmodel_service_by_name(NI_OBJECTMODEL_NETIFLIST_INTERFACE);
-               ni_assert(netif_list_service);
-       }
+       if (!(list_service = ni_call_get_netif_list_service()))
+               return NULL;
 
-       list_object = __ni_call_get_proxy_object(netif_list_service, 
"Interface");
+       if ((list_object = __ni_call_get_proxy_object(list_service, 
"Interface")))
+               ni_dbus_object_set_default_interface(list_object, 
list_service->name);
 
-       ni_dbus_object_set_default_interface(list_object, 
netif_list_service->name);
        return list_object;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/dbus-connection.c new/wicked-0.6.50/src/dbus-connection.c
--- old/wicked-0.6.49/src/dbus-connection.c     2017-07-28 14:41:47.000000000 
+0200
+++ new/wicked-0.6.50/src/dbus-connection.c     2018-10-04 14:23:19.000000000 
+0200
@@ -317,6 +317,10 @@
                                "unable to send DBus message (errno=%d)", 
errno);
                return NULL;
        }
+       if (!pending) {
+               dbus_set_error (error, DBUS_ERROR_DISCONNECTED, "Connection is 
closed");
+               return NULL;
+       }
 
        dbus_pending_call_block(pending);
 
@@ -326,6 +330,7 @@
                __ni_dbus_connection_dispatch(connection);
 
        reply = dbus_pending_call_steal_reply(pending);
+       dbus_pending_call_unref (pending);
 
        if (reply == NULL) {
                dbus_set_error(error, DBUS_ERROR_FAILED, "dbus: no reply");
@@ -362,7 +367,11 @@
        DBusPendingCall *pending;
 
        if (!dbus_connection_send_with_reply(connection->conn, call, &pending, 
timeout)) {
-               ni_error("dbus_connection_send_with_reply: %m");
+               ni_error("dbus: unable to send async message (errno=%d): %m", 
errno);
+               return -NI_ERROR_DBUS_CALL_FAILED;
+       }
+       if (!pending) {
+               ni_error("dbus: connection is closed: %m");
                return -NI_ERROR_DBUS_CALL_FAILED;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/dbus-dict.c new/wicked-0.6.50/src/dbus-dict.c
--- old/wicked-0.6.49/src/dbus-dict.c   2015-10-05 19:14:29.000000000 +0200
+++ new/wicked-0.6.50/src/dbus-dict.c   2018-10-04 14:23:19.000000000 +0200
@@ -83,7 +83,6 @@
        if (!dbus_message_iter_next(&iter_dict_entry))
                goto error;
 
-       /* ni_debug_dbus("decoding entry %s of type %s", key, 
dbus_message_iter_get_signature(&iter_dict_entry)); */
        if (!ni_dbus_message_iter_get_variant(&iter_dict_entry, &entry->datum))
                goto error;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/dbus-message.c new/wicked-0.6.50/src/dbus-message.c
--- old/wicked-0.6.49/src/dbus-message.c        2015-10-05 19:14:29.000000000 
+0200
+++ new/wicked-0.6.50/src/dbus-message.c        2018-10-04 14:23:19.000000000 
+0200
@@ -345,9 +345,13 @@
 ni_dbus_message_iter_get_array_array(DBusMessageIter *iter, ni_dbus_variant_t 
*variant)
 {
        dbus_bool_t rv = TRUE;
+       char *signature;
 
-       ni_dbus_array_array_init(variant, 
-                       dbus_message_iter_get_signature(iter));
+       if (!(signature = dbus_message_iter_get_signature(iter)))
+               return FALSE;
+
+       ni_dbus_array_array_init(variant, signature);
+       ni_string_free(&signature);
 
        while (rv && dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_ARRAY) {
                ni_dbus_variant_t *elem;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/dbus-object.c new/wicked-0.6.50/src/dbus-object.c
--- old/wicked-0.6.49/src/dbus-object.c 2018-09-21 15:52:42.000000000 +0200
+++ new/wicked-0.6.50/src/dbus-object.c 2018-10-04 14:23:19.000000000 +0200
@@ -113,12 +113,15 @@
        if (object->client_object)
                __ni_dbus_client_object_destroy(object);
 
-       ni_string_free(&object->name);
-       ni_string_free(&object->path);
-
        while ((child = object->children) != NULL)
                __ni_dbus_object_free(child);
 
+       if (object->handle && object->class && object->class->destroy)
+               object->class->destroy(object);
+
+       ni_string_free(&object->name);
+       ni_string_free(&object->path);
+
        free(object->interfaces);
        free(object);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/dbus-objects/interface.c 
new/wicked-0.6.50/src/dbus-objects/interface.c
--- old/wicked-0.6.49/src/dbus-objects/interface.c      2018-09-21 
15:52:42.000000000 +0200
+++ new/wicked-0.6.50/src/dbus-objects/interface.c      2018-10-04 
14:23:19.000000000 +0200
@@ -1357,8 +1357,6 @@
                return;
 
        NI_TRACE_ENTER_ARGS("object=%s, dev=%p", object->path, ifp);
-       ni_assert(ifp);
-       ni_client_state_drop(ifp->link.ifindex);
        ni_netdev_put(ifp);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/fsm.c new/wicked-0.6.50/src/fsm.c
--- old/wicked-0.6.49/src/fsm.c 2018-09-21 15:52:42.000000000 +0200
+++ new/wicked-0.6.50/src/fsm.c 2018-10-04 14:23:19.000000000 +0200
@@ -239,9 +239,10 @@
 
        worker = __ni_ifworker_new(type, name);
        ni_ifworker_array_append(array, worker);
-       worker->refcount--;
-
-       return worker;
+       if (ni_ifworker_release(worker))
+               return worker;
+       else
+               return NULL;
 }
 
 ni_ifworker_t *
@@ -376,41 +377,57 @@
 void
 ni_ifworker_reset(ni_ifworker_t *w)
 {
-       ni_ifworker_cancel_secondary_timeout(w);
-       ni_ifworker_cancel_timeout(w);
-
-       ni_string_free(&w->object_path);
+       /* Reset client state config and control */
        ni_ifworker_control_init(&w->control);
-       ni_string_free(&w->config.meta.origin);
        ni_security_id_destroy(&w->security_id);
+       ni_client_state_config_reset(&w->config.meta);
 
-       /* When detaching children, clear their lowerdev/masterdev ownership 
info */
+       /* Clear lowerdev/masterdev relations */
        ni_fsm_clear_hierarchy(w);
 
-       w->target_range.min = NI_FSM_STATE_NONE;
-       w->target_range.max = __NI_FSM_STATE_MAX;
-
-       /* Clear config and stats*/
-       ni_client_state_config_init(&w->config.meta);
-
        ni_ifworker_rearm(w);
        __ni_ifworker_reset_device_api(w);
 
        w->readonly = FALSE;
        w->dead = FALSE;
        w->pending = FALSE;
+
+       w->target_range.min = NI_FSM_STATE_NONE;
+       w->target_range.max = __NI_FSM_STATE_MAX;
 }
 
 void
 ni_ifworker_free(ni_ifworker_t *w)
 {
-       ni_ifworker_reset(w);
+       /* Destroy client state config and control */
+       ni_ifworker_control_destroy(&w->control);
+       ni_security_id_destroy(&w->security_id);
+       ni_client_state_config_reset(&w->config.meta);
+
+       /* Destroy config and state nodes */
+       xml_node_free(w->config.node);
+       xml_node_free(w->state.node);
+
+       /* Clear lowerdev/masterdev relations */
+       ni_fsm_clear_hierarchy(w);
+
+       ni_ifworker_rearm(w);
+       __ni_ifworker_destroy_fsm(w);
+       __ni_ifworker_reset_device_api(w);
+
+       w->readonly = FALSE;
+       w->dead = FALSE;
+       w->pending = FALSE;
+
+       w->target_range.min = NI_FSM_STATE_NONE;
+       w->target_range.max = __NI_FSM_STATE_MAX;
+
+       ni_string_free(&w->object_path);
        if (w->device)
                ni_netdev_put(w->device);
        if (w->modem)
                ni_modem_release(w->modem);
-       __ni_ifworker_destroy_fsm(w);
-       xml_node_free(w->state.node);
+
        ni_string_free(&w->name);
        ni_string_free(&w->old_name);
        free(w);
@@ -786,6 +803,9 @@
 void
 ni_ifworker_array_append(ni_ifworker_array_t *array, ni_ifworker_t *w)
 {
+       if (!array || !w)
+               return;
+
        array->data = realloc(array->data, (array->count + 1) * 
sizeof(array->data[0]));
        array->data[array->count++] = ni_ifworker_get(w);
 }
@@ -3939,10 +3959,10 @@
 static ni_bool_t
 __ni_ifworker_refresh_netdevs(ni_fsm_t *fsm)
 {
-       static ni_dbus_object_t *list_object = NULL;
+       ni_dbus_object_t *list_object;
        ni_dbus_object_t *object;
 
-       if (!list_object && !(list_object = ni_call_get_netif_list_object())) {
+       if (!(list_object = ni_call_get_netif_list_object())) {
                ni_error("unable to get server's interface list");
                return FALSE;
        }
@@ -3965,11 +3985,10 @@
        ni_ifworker_t *found = NULL;
        ni_bool_t renamed = FALSE;
 
+       /* note: dev is a not yet referece counted object->handle */
        if (dev == NULL || dev->name == NULL || refresh) {
-               if (!ni_dbus_object_refresh_children(object)) {
-                       ni_error("%s: failed to refresh netdev object", 
object->path);
+               if (!ni_dbus_object_refresh_children(object))
                        return NULL;
-               }
 
                dev = ni_objectmodel_unwrap_netif(object, NULL);
        }
@@ -3994,7 +4013,8 @@
                        ni_debug_application("received new ready device %s 
(%s)",
                                                dev->name, object->path);
                        found = ni_ifworker_new(&fsm->workers, 
NI_IFWORKER_TYPE_NETDEV, dev->name);
-                       found->readonly = fsm->readonly;
+                       if (found)
+                               found->readonly = fsm->readonly;
                } else {
                        renamed = !ni_string_eq(found->name, dev->name);
                        if (renamed)
@@ -4004,7 +4024,7 @@
                                ni_debug_application("received refresh for 
ready device %s (%s)",
                                                        dev->name, 
object->path);
                }
-               if (dev->client_state)
+               if (dev->client_state && found)
                        ni_ifworker_refresh_client_state(found, 
dev->client_state);
        } else {
                /* even we we've created it and know the object-path/ifindex
@@ -4016,7 +4036,8 @@
                        ni_debug_application("received new non-ready device %s 
(%s)",
                                        dev->name, object->path);
                        found = ni_ifworker_new(&fsm->pending, 
NI_IFWORKER_TYPE_NETDEV, dev->name);
-                       found->readonly = fsm->readonly;
+                       if (found)
+                               found->readonly = fsm->readonly;
                } else {
                        renamed = !ni_string_eq(found->name, dev->name);
                        if (renamed)
@@ -4028,6 +4049,9 @@
                }
        }
 
+       if (!found)
+               return NULL;
+
        if (!found->object_path)
                ni_string_dup(&found->object_path, object->path);
 
@@ -4119,6 +4143,9 @@
                found = ni_ifworker_new(&fsm->workers, NI_IFWORKER_TYPE_MODEM, 
modem->device);
        }
 
+       if (!found)
+               return NULL;
+
        if (!found->object_path)
                ni_string_dup(&found->object_path, object->path);
        if (!found->modem)
@@ -4803,6 +4830,8 @@
 static int
 ni_ifworker_call_device_factory(ni_fsm_t *fsm, ni_ifworker_t *w, 
ni_fsm_transition_t *action)
 {
+       ni_netdev_t *dev;
+
        /* Initially, enable waiting for this action */
        w->fsm.wait_for = action;
 
@@ -4853,6 +4882,10 @@
                        return -1;
                }
 
+               dev = ni_netdev_get(ni_objectmodel_unwrap_netif(w->object, 
NULL));
+               ni_netdev_put(w->device);
+               w->device = dev;
+
                ni_fsm_schedule_bind_methods(fsm, w);
        }
 
@@ -5188,6 +5221,8 @@
                        ni_fsm_events_unblock(fsm);
 release:
                        ni_ifworker_release(w);
+
+                       ni_dbus_objects_garbage_collect();
                }
 
                if (!made_progress)
@@ -5600,14 +5635,55 @@
 }
 
 static void
+ni_fsm_process_device_delete_event(ni_fsm_t *fsm, ni_fsm_event_t *ev, 
ni_ifworker_t *w)
+{
+       ni_dbus_object_t *netif_list;
+       ni_dbus_object_t *object;
+
+       /* device-ready worker exist and is possibly also active */
+       if (w) {
+               ni_ifworker_get(w);
+               ni_fsm_process_worker_event(fsm, w, ev);
+               ni_ifworker_release(w);
+               ni_debug_application("deleted worker device with object path 
%s",
+                                       ev->object_path);
+       }
+
+       /* we may have a created but not yet ready/pending worker */
+       w = ni_ifworker_array_find_by_objectpath(&fsm->pending, 
ev->object_path);
+       if (w) {
+               ni_ifworker_get(w);
+               ni_ifworker_array_remove(&fsm->pending, w);
+               ni_ifworker_release(w);
+               ni_debug_application("deleted pending device worker with object 
path %s",
+                                       ev->object_path);
+       }
+
+       /* finally, we may also have an netif-list device object */
+       if ((netif_list = ni_call_get_netif_list_object())) {
+               for (object = netif_list->children; object; ) {
+                       if (ni_string_eq(object->path, ev->object_path)) {
+                               ni_dbus_object_free(object);
+                               ni_debug_application("deleted object %s from 
netif-list",
+                                       ev->object_path);
+                               object = NULL;
+                       } else {
+                               object = object->next;
+                       }
+               }
+       }
+}
+
+static void
 ni_fsm_process_event(ni_fsm_t *fsm, ni_fsm_event_t *ev)
 {
-       ni_ifworker_t *w = ni_fsm_ifworker_by_object_path(fsm, ev->object_path);
+       ni_ifworker_t *w;
 
        fsm->event_seq += 1;
 
-       ni_debug_events("%s: process event signal %s from %s; uuid=<%s>",
-                       w ? w->name : "",
+       w = ni_fsm_ifworker_by_object_path(fsm, ev->object_path);
+
+       ni_debug_events("process event signal %s from %s; uuid=<%s>",
                        ni_objectmodel_event_to_signal(ev->event_type),
                        ev->object_path, ni_uuid_print(&ev->event_uuid));
 
@@ -5624,6 +5700,15 @@
         * change with uuid followed by the unsolicited event without uuid.
         */
        switch (ev->event_type) {
+       case NI_EVENT_DEVICE_DELETE:
+               ni_fsm_process_device_delete_event(fsm, ev, w);
+               return;
+
+       case NI_EVENT_DEVICE_CREATE:
+               /* when there is no worker yet with assigned object-path,
+                * we refresh and allocate a pending worker first. */
+               break;
+
        case NI_EVENT_DEVICE_RENAME:
                w = ni_fsm_process_rename_event(fsm, ev);
                break;
@@ -5659,13 +5744,25 @@
                break;
        }
 
-       if (!w && !(w = ni_fsm_recv_new_netif_path(fsm, ev->object_path))) {
-               ni_error("%s: Cannot find corresponding worker for %s",
-                               __func__, ev->object_path);
-               return;
+       if (!w) {
+               /* fetch netif object properties and assign device to
+                * the pending fsm worker set or to config/ready worker.
+                */
+               if (!ni_fsm_recv_new_netif_path(fsm, ev->object_path)) {
+                       ni_debug_application("%s: refresh failed, cannot 
process %s worker %s event",
+                                       __func__, ev->object_path, 
ni_objectmodel_event_to_signal(ev->event_type));
+                       return;
+               }
+               w = ni_fsm_ifworker_by_object_path(fsm, ev->object_path);
+               if (!w) {
+                       ni_debug_application("%s: No ready fsm worker for %s 
found to process %s event",
+                                               __func__, ev->object_path, 
ni_objectmodel_event_to_signal(ev->event_type));
+                               return;
+               }
        }
 
        ni_ifworker_get(w);
+       /* process non-pending/ready or factory worker events */
        ni_fsm_process_worker_event(fsm, w, ev);
        ni_ifworker_release(w);
 }
@@ -5782,6 +5879,7 @@
 
                fsm->timeout_count = 0;
                *timeout_p = ni_timer_next_timeout();
+               ni_dbus_objects_garbage_collect();
        } while (fsm->timeout_count);
 
        return pending_workers;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/netdev.c new/wicked-0.6.50/src/netdev.c
--- old/wicked-0.6.49/src/netdev.c      2018-09-21 15:52:42.000000000 +0200
+++ new/wicked-0.6.50/src/netdev.c      2018-10-04 14:23:19.000000000 +0200
@@ -148,25 +148,26 @@
 ni_netdev_t *
 ni_netdev_get(ni_netdev_t *dev)
 {
-       if (!dev->users)
-               return NULL;
-       dev->users++;
+       if (dev) {
+               ni_assert(dev->users);
+               dev->users++;
+       }
        return dev;
 }
 
-int
+unsigned int
 ni_netdev_put(ni_netdev_t *dev)
 {
-       if (!dev->users) {
-               ni_error("ni_netdev_put: bad mojo");
-               return 0;
-       }
-       dev->users--;
-       if (dev->users == 0) {
-               ni_netdev_free(dev);
-               return 0;
+       if (dev) {
+               ni_assert(dev->users);
+               dev->users--;
+
+               if (dev->users == 0)
+                       ni_netdev_free(dev);
+               else
+                       return dev->users;
        }
-       return dev->users;
+       return 0;
 }
 
 ni_bool_t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/xml-schema.c new/wicked-0.6.50/src/xml-schema.c
--- old/wicked-0.6.49/src/xml-schema.c  2017-07-28 14:41:47.000000000 +0200
+++ new/wicked-0.6.50/src/xml-schema.c  2018-10-04 14:23:19.000000000 +0200
@@ -54,7 +54,7 @@
  * Constructor functions for basic and complex types
  */
 static ni_xs_type_t *
-__ni_xs_type_new(unsigned int class)
+ni_xs_type_new(unsigned int class)
 {
        ni_xs_type_t *type = xcalloc(1, sizeof(*type));
 
@@ -66,7 +66,7 @@
 ni_xs_type_t *
 ni_xs_scalar_new(const char *basic_name, unsigned int scalar_type)
 {
-       ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_SCALAR);
+       ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_SCALAR);
 
        type->u.scalar_info = xcalloc(1, sizeof(ni_xs_scalar_info_t));
        type->u.scalar_info->basic_name = basic_name;
@@ -77,7 +77,7 @@
 ni_xs_type_t *
 ni_xs_struct_new(ni_xs_name_type_array_t *children)
 {
-       ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_STRUCT);
+       ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_STRUCT);
 
        type->u.struct_info = xcalloc(1, sizeof(ni_xs_struct_info_t));
        if (children)
@@ -88,7 +88,7 @@
 ni_xs_type_t *
 ni_xs_union_new(ni_xs_name_type_array_t *children, const char *discriminant)
 {
-       ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_UNION);
+       ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_UNION);
 
        type->u.union_info = xcalloc(1, sizeof(ni_xs_union_info_t));
        if (children)
@@ -100,7 +100,7 @@
 ni_xs_type_t *
 ni_xs_dict_new(ni_xs_name_type_array_t *children)
 {
-       ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_DICT);
+       ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_DICT);
 
        type->u.dict_info = xcalloc(1, sizeof(ni_xs_dict_info_t));
        if (children)
@@ -111,7 +111,7 @@
 ni_xs_type_t *
 ni_xs_array_new(ni_xs_type_t *elementType, const char *elementName, unsigned 
long minlen, unsigned long maxlen)
 {
-       ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_ARRAY);
+       ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_ARRAY);
 
        type->u.array_info = xcalloc(1, sizeof(struct ni_xs_array_info));
        type->u.array_info->element_type = ni_xs_type_hold(elementType);
@@ -360,7 +360,7 @@
 }
 
 static ni_xs_type_t *
-__ni_xs_name_type_array_find(const ni_xs_name_type_array_t *array, const char 
*name)
+ni_xs_name_type_array_find_local(const ni_xs_name_type_array_t *array, const 
char *name)
 {
        ni_xs_name_type_t *def;
        unsigned int i;
@@ -375,7 +375,7 @@
 const ni_xs_type_t *
 ni_xs_name_type_array_find(const ni_xs_name_type_array_t *array, const char 
*name)
 {
-       return __ni_xs_name_type_array_find(array, name);
+       return ni_xs_name_type_array_find_local(array, name);
 }
 
 /*
@@ -449,7 +449,7 @@
 ni_xs_type_t *
 ni_xs_scope_lookup_local(const ni_xs_scope_t *dict, const char *name)
 {
-       return __ni_xs_name_type_array_find(&dict->types, name);
+       return ni_xs_name_type_array_find_local(&dict->types, name);
 }
 
 ni_xs_type_t *
@@ -786,7 +786,7 @@
                                ni_error("%s: cannot parse <return> element", 
xml_node_location(node));
                                return -1;
                        }
-                       method->retval = ni_xs_type_hold(type);
+                       method->retval = type;
                } else
                if (ni_string_eq(child->name, "description")) {
                        ni_string_dup(&method->description, child->cdata);
@@ -1168,7 +1168,6 @@
                                ni_error("%s: array definition references 
unknown element type <%s>", __func__, typeAttr);
                                return NULL;
                        }
-                       ni_xs_type_hold(elementType);
                } else {
                        elementType = ni_xs_build_one_type(node, scope);
                        if (elementType == NULL)
@@ -1242,7 +1241,7 @@
                }
        } else
        if (!strcmp(className, "void")) {
-               type = __ni_xs_type_new(NI_XS_TYPE_VOID);
+               type = ni_xs_type_new(NI_XS_TYPE_VOID);
        } else {
                ni_error("%s: unknown class=\"%s\"", xml_node_location(node), 
className);
                return NULL;
@@ -1549,23 +1548,28 @@
 ni_xs_build_range_constraint(const xml_node_t *node)
 {
        unsigned long min = 0, max = ~0UL;
-       const char *ep;
+       const char *attr;
 
-       if ((ep = xml_node_get_attr(node, "min")) != NULL) {
-               min = strtoul(ep, (char **) ep, 0);
-               if (*ep) {
-                       ni_error("%s: invalid min value for range constraint", 
xml_node_location(node));
+       if ((attr = xml_node_get_attr(node, "min")) != NULL) {
+               if (ni_parse_ulong(attr, &min, 0)) {
+                       ni_error("%s: invalid min value for range constraint",
+                                       xml_node_location(node));
                        return NULL;
                }
        }
-       if ((ep = xml_node_get_attr(node, "max")) != NULL) {
-               max = strtoul(ep, (char **) ep, 0);
-               if (*ep) {
-                       ni_error("%s: invalid max value for range constraint", 
xml_node_location(node));
+       if ((attr = xml_node_get_attr(node, "max")) != NULL) {
+               if (ni_parse_ulong(attr, &max, 0)) {
+                       ni_error("%s: invalid max value for range constraint",
+                                       xml_node_location(node));
                        return NULL;
                }
        }
 
+       if (min > max) {
+               ni_error("%s: invalid range constraint", 
xml_node_location(node));
+               return NULL;
+       }
+
        return ni_xs_range_new(min, max);
 }
 
@@ -1802,6 +1806,7 @@
                        ni_xs_scope_free(localdict);
                } else {
                        result = ni_xs_scope_lookup(scope, child->name);
+                       ni_xs_type_hold(result);
                }
                if (result == NULL) {
                        ni_error("%s: unknown type or class <%s>", 
xml_node_location(child), child->name);
@@ -1814,10 +1819,10 @@
                goto error;
        }
 
-       ni_xs_type_hold(result);
        return result;
 
 error:
+       ni_xs_type_release(result);
        return NULL;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/xml-schema.h new/wicked-0.6.50/src/xml-schema.h
--- old/wicked-0.6.49/src/xml-schema.h  2017-07-28 14:41:47.000000000 +0200
+++ new/wicked-0.6.50/src/xml-schema.h  2018-10-04 14:23:19.000000000 +0200
@@ -373,9 +373,11 @@
 static inline void
 ni_xs_type_release(ni_xs_type_t *type)
 {
-       ni_assert(type->refcount);
-       if (--(type->refcount) == 0)
-               ni_xs_type_free(type);
+       if (type) {
+               ni_assert(type->refcount);
+               if (--(type->refcount) == 0)
+                       ni_xs_type_free(type);
+       }
 }
 
 static inline ni_xs_scalar_info_t *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/src/xpath.c new/wicked-0.6.50/src/xpath.c
--- old/wicked-0.6.49/src/xpath.c       2015-10-05 19:14:29.000000000 +0200
+++ new/wicked-0.6.50/src/xpath.c       2018-10-04 14:23:19.000000000 +0200
@@ -127,7 +127,7 @@
 failed:
        ni_error("unable to parse XPATH expression \"%s\"", orig_expr);
        if (tree)
-               xpath_enode_free(tree);
+               xpath_expression_free(tree);
        return NULL;
 }
 
@@ -149,18 +149,24 @@
 /*
  * Free a parsed XPATH expression
  */
-void
-xpath_expression_free(xpath_enode_t *enode)
+static inline void
+xpath_expr_free(xpath_enode_t *enode, unsigned int depth, const char *info)
 {
        if (!enode)
                return;
-       if (enode->left)
-               xpath_enode_free(enode->left);
-       if (enode->right)
-               xpath_enode_free(enode->right);
+       xtrace("xpath_expression_free(%*.s%s %s %s)", depth, " ", info,
+               enode->ops ? enode->ops->name : NULL, enode->identifier);
+       xpath_expr_free(enode->left,  depth + 2, "left ");
+       xpath_expr_free(enode->right, depth + 2, "right");
        xpath_enode_free(enode);
 }
 
+void
+xpath_expression_free(xpath_enode_t *enode)
+{
+       xpath_expr_free(enode, 0, "expr ");
+}
+
 /*
  * Convenience function: parse XPATH expression, evaluate it once,
  * and return the resulting string.
@@ -442,7 +448,7 @@
 failed:
        /* ni_error("xpath: syntax error in expression \"%s\" at position %s", 
expr, pos); */
        if (current)
-               xpath_enode_free(current);
+               xpath_expression_free(current);
        return NULL;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/wicked-0.6.49/wicked.spec new/wicked-0.6.50/wicked.spec
--- old/wicked-0.6.49/wicked.spec       2018-09-21 16:23:57.000000000 +0200
+++ new/wicked-0.6.50/wicked.spec       2018-10-04 14:29:04.000000000 +0200
@@ -18,7 +18,7 @@
 
 %define                release_prefix  %{?snapshot:%{snapshot}}%{!?snapshot:0}
 Name:           wicked
-Version:        0.6.49
+Version:        0.6.50
 Release:        %{release_prefix}.0.0
 Summary:        Network configuration infrastructure
 License:        GPL-2.0


Reply via email to