Hello community,

here is the log from the commit of package nghttp2 for openSUSE:Factory checked 
in at 2015-07-02 22:49:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/nghttp2 (Old)
 and      /work/SRC/openSUSE:Factory/.nghttp2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "nghttp2"

Changes:
--------
--- /work/SRC/openSUSE:Factory/nghttp2/nghttp2.changes  2015-06-24 
21:06:05.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.nghttp2.new/nghttp2.changes     2015-07-03 
00:10:44.000000000 +0200
@@ -1,0 +2,11 @@
+Tue Jun 30 11:54:06 UTC 2015 - mplus...@suse.com
+
+- Update to 1.0.5
+  * Add STREAM_DEP_DEBUG macro switch to enable runtime validation 
+    of depedency tree
+  * Fix another bug in priority handling; sibling's item is not 
+    queued when ancestor's item is detached
+  * nghttpx: Fix crash with --http2-bridge and both frontend and 
+    backend TLS
+
+-------------------------------------------------------------------

Old:
----
  nghttp2-1.0.4.tar.xz

New:
----
  nghttp2-1.0.5.tar.xz

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

Other differences:
------------------
++++++ nghttp2.spec ++++++
--- /var/tmp/diff_new_pack.QZyVgE/_old  2015-07-03 00:10:45.000000000 +0200
+++ /var/tmp/diff_new_pack.QZyVgE/_new  2015-07-03 00:10:45.000000000 +0200
@@ -19,7 +19,7 @@
 %define lib_name lib%{name}-14
 %define lib_name_asio lib%{name}_asio1
 Name:           nghttp2
-Version:        1.0.4
+Version:        1.0.5
 Release:        0
 Summary:        Implementation of Hypertext Transfer Protocol version 2 in C
 License:        MIT

++++++ nghttp2-1.0.4.tar.xz -> nghttp2-1.0.5.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/ChangeLog new/nghttp2-1.0.5/ChangeLog
--- old/nghttp2-1.0.4/ChangeLog 2015-06-23 16:24:41.000000000 +0200
+++ new/nghttp2-1.0.5/ChangeLog 2015-06-27 04:00:23.000000000 +0200
@@ -1,34 +1,91 @@
-commit 5a8d5e5dd91eff3730c72a9f15fbc4f36a71c3fc (HEAD, tag: v1.0.4, 
origin/master, origin/HEAD, master)
+commit 68f6df61e53137eed8e7c68ae937adbb9a969dc9 (HEAD, tag: v1.0.5, 
origin/master, origin/HEAD, master)
 Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
-AuthorDate: 2015-06-23
+AuthorDate: 2015-06-27
 Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
-CommitDate: 2015-06-23
+CommitDate: 2015-06-27
 
     Update man pages
 
-commit 9bcb0ffdef08537d327b961293098858d501cbb6
+commit 078337de3c210bbc374b8443b0651199bfe64877
 Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
-AuthorDate: 2015-06-23
+AuthorDate: 2015-06-27
 Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
-CommitDate: 2015-06-23
+CommitDate: 2015-06-27
 
-    Bump up version number to 1.0.4, LT revision to 14:4:0
+    Bump up version number to 1.0.5, LT revision to 14:5:0
 
-commit 1945d0f02ab3bda84411f1741ec4a54f507c8c6f
+commit 9e82687cbe988390a5695cd3fd5ef50f5243251b
 Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
-AuthorDate: 2015-06-23
+AuthorDate: 2015-06-26
 Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
-CommitDate: 2015-06-23
+CommitDate: 2015-06-26
+
+    Fix compile error with --enable-werror
+
+commit 660f90e13f91804e3d771c038cfe62fd5cf0b580
+Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+AuthorDate: 2015-06-26
+Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+CommitDate: 2015-06-26
+
+    Add switch STREAM_DEP_DEBUG to enable runtime validation of depedency tree
+
+commit 2eec42df3953d3256c9f4bfe3357efe0e4fb06f3
+Merge: bab99af 34b92a3
+Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+AuthorDate: 2015-06-26
+Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+CommitDate: 2015-06-26
+
+    Merge branch 'master' of https://github.com/tatsuhiro-t/nghttp2
+
+commit 34b92a30de8a09af27e903d1976d5ea561c99ec2
+Merge: d6ca95a 2e8e38e
+Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+AuthorDate: 2015-06-26
+Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+CommitDate: 2015-06-26
 
-    Fix assertion failure in nghttp2_stream.c
+    Merge pull request #268 from Andersbakken/typo
     
-    This is regression introduced in
-    46b70c1db8534a2d3ee8dc93eb6343633a0180b3.
+    Fix typo
+
+commit bab99af565ac7c89e10fa9d8d7b3b6e11708ec7a
+Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+AuthorDate: 2015-06-25
+Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+CommitDate: 2015-06-25
+
+    Fix unusual control flow in stream_update_dep_set_rest
+
+commit 2e8e38ec3512d92b0fbf1ad565529001bf237855
+Author:     Anders Bakken <agbak...@gmail.com>
+AuthorDate: 2015-06-24
+Commit:     Anders Bakken <agbak...@gmail.com>
+CommitDate: 2015-06-24
+
+    Fix typo
+
+commit d6ca95a0c9f790a45ea682eccafdb12d8d19976e
+Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+AuthorDate: 2015-06-24
+Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+CommitDate: 2015-06-24
+
+    Fix sibling's item is not queued when ancestor's item is detached
+
+commit 285c74c39418537bc5b3f949be301cdb1f9e39f0
+Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+AuthorDate: 2015-06-24
+Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
+CommitDate: 2015-06-24
+
+    nghttpx: Fix crash with --http2-bridge and both frontend and backend TLS
 
-commit 4870edb33d770332b1f30b5c8e63293711defedd
+commit 7780c0783835ad33e22e2b9b33d59d9a71eb5bda
 Author:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
 AuthorDate: 2015-06-23
 Commit:     Tatsuhiro Tsujikawa <tatsuhir...@gmail.com>
 CommitDate: 2015-06-23
 
-    Bump up version number to 1.0.4-DEV
+    Bump up version number to 1.0.5-DEV
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/configure new/nghttp2-1.0.5/configure
--- old/nghttp2-1.0.4/configure 2015-06-23 16:24:23.000000000 +0200
+++ new/nghttp2-1.0.5/configure 2015-06-27 04:00:09.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for nghttp2 1.0.4.
+# Generated by GNU Autoconf 2.69 for nghttp2 1.0.5.
 #
 # Report bugs to <t-tujik...@users.sourceforge.net>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='nghttp2'
 PACKAGE_TARNAME='nghttp2'
-PACKAGE_VERSION='1.0.4'
-PACKAGE_STRING='nghttp2 1.0.4'
+PACKAGE_VERSION='1.0.5'
+PACKAGE_STRING='nghttp2 1.0.5'
 PACKAGE_BUGREPORT='t-tujik...@users.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1438,7 +1438,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 nghttp2 1.0.4 to adapt to many kinds of systems.
+\`configure' configures nghttp2 1.0.5 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1509,7 +1509,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of nghttp2 1.0.4:";;
+     short | recursive ) echo "Configuration of nghttp2 1.0.5:";;
    esac
   cat <<\_ACEOF
 
@@ -1690,7 +1690,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-nghttp2 configure 1.0.4
+nghttp2 configure 1.0.5
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2650,7 +2650,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by nghttp2 $as_me 1.0.4, which was
+It was created by nghttp2 $as_me 1.0.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -12127,7 +12127,7 @@
 
 # Define the identity of the package.
  PACKAGE='nghttp2'
- VERSION='1.0.4'
+ VERSION='1.0.5'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -12398,7 +12398,7 @@
 
 LT_CURRENT=14
 
-LT_REVISION=4
+LT_REVISION=5
 
 LT_AGE=0
 
@@ -23147,7 +23147,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by nghttp2 $as_me 1.0.4, which was
+This file was extended by nghttp2 $as_me 1.0.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23213,7 +23213,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-nghttp2 config.status 1.0.4
+nghttp2 config.status 1.0.5
 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/nghttp2-1.0.4/configure.ac 
new/nghttp2-1.0.5/configure.ac
--- old/nghttp2-1.0.4/configure.ac      2015-06-23 16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/configure.ac      2015-06-27 03:59:57.000000000 +0200
@@ -25,7 +25,7 @@
 dnl 
http://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
 
 AC_PREREQ(2.61)
-AC_INIT([nghttp2], [1.0.4], [t-tujik...@users.sourceforge.net])
+AC_INIT([nghttp2], [1.0.5], [t-tujik...@users.sourceforge.net])
 AC_USE_SYSTEM_EXTENSIONS
 
 LT_PREREQ([2.2.6])
@@ -48,7 +48,7 @@
 dnl See versioning rule:
 dnl  
http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
 AC_SUBST(LT_CURRENT, 14)
-AC_SUBST(LT_REVISION, 4)
+AC_SUBST(LT_REVISION, 5)
 AC_SUBST(LT_AGE, 0)
 
 major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/doc/h2load.1 
new/nghttp2-1.0.5/doc/h2load.1
--- old/nghttp2-1.0.4/doc/h2load.1      2015-06-23 16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/doc/h2load.1      2015-06-27 03:59:57.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "H2LOAD" "1" "June 23, 2015" "1.0.4" "nghttp2"
+.TH "H2LOAD" "1" "June 27, 2015" "1.0.5" "nghttp2"
 .SH NAME
 h2load \- HTTP/2 benchmarking tool
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/doc/nghttp.1 
new/nghttp2-1.0.5/doc/nghttp.1
--- old/nghttp2-1.0.4/doc/nghttp.1      2015-06-23 16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/doc/nghttp.1      2015-06-27 03:59:57.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NGHTTP" "1" "June 23, 2015" "1.0.4" "nghttp2"
+.TH "NGHTTP" "1" "June 27, 2015" "1.0.5" "nghttp2"
 .SH NAME
 nghttp \- HTTP/2 experimental client
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/doc/nghttpd.1 
new/nghttp2-1.0.5/doc/nghttpd.1
--- old/nghttp2-1.0.4/doc/nghttpd.1     2015-06-23 16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/doc/nghttpd.1     2015-06-27 03:59:57.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NGHTTPD" "1" "June 23, 2015" "1.0.4" "nghttp2"
+.TH "NGHTTPD" "1" "June 27, 2015" "1.0.5" "nghttp2"
 .SH NAME
 nghttpd \- HTTP/2 experimental server
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/doc/nghttpx.1 
new/nghttp2-1.0.5/doc/nghttpx.1
--- old/nghttp2-1.0.4/doc/nghttpx.1     2015-06-23 16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/doc/nghttpx.1     2015-06-27 03:59:57.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NGHTTPX" "1" "June 23, 2015" "1.0.4" "nghttp2"
+.TH "NGHTTPX" "1" "June 27, 2015" "1.0.5" "nghttp2"
 .SH NAME
 nghttpx \- HTTP/2 experimental proxy
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/lib/includes/nghttp2/nghttp2ver.h 
new/nghttp2-1.0.5/lib/includes/nghttp2/nghttp2ver.h
--- old/nghttp2-1.0.4/lib/includes/nghttp2/nghttp2ver.h 2015-06-23 
16:24:53.000000000 +0200
+++ new/nghttp2-1.0.5/lib/includes/nghttp2/nghttp2ver.h 2015-06-27 
04:00:32.000000000 +0200
@@ -29,7 +29,7 @@
  * @macro
  * Version number of the nghttp2 library release
  */
-#define NGHTTP2_VERSION "1.0.4"
+#define NGHTTP2_VERSION "1.0.5"
 
 /**
  * @macro
@@ -37,6 +37,6 @@
  * release. This is a 24 bit number with 8 bits for major number, 8 bits
  * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
  */
-#define NGHTTP2_VERSION_NUM 0x010004
+#define NGHTTP2_VERSION_NUM 0x010005
 
 #endif /* NGHTTP2VER_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/lib/nghttp2_helper.c 
new/nghttp2-1.0.5/lib/nghttp2_helper.c
--- old/nghttp2-1.0.4/lib/nghttp2_helper.c      2015-06-23 16:24:06.000000000 
+0200
+++ new/nghttp2-1.0.5/lib/nghttp2_helper.c      2015-06-27 03:59:57.000000000 
+0200
@@ -308,7 +308,7 @@
   case NGHTTP2_ERR_CALLBACK_FAILURE:
     return "The user callback function failed";
   case NGHTTP2_ERR_BAD_CLIENT_MAGIC:
-    return "Received bad clinet magic byte string";
+    return "Received bad client magic byte string";
   default:
     return "Unknown error code";
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/lib/nghttp2_stream.c 
new/nghttp2-1.0.5/lib/nghttp2_stream.c
--- old/nghttp2-1.0.4/lib/nghttp2_stream.c      2015-06-23 16:24:06.000000000 
+0200
+++ new/nghttp2-1.0.5/lib/nghttp2_stream.c      2015-06-27 03:59:57.000000000 
+0200
@@ -155,6 +155,8 @@
 }
 
 static void stream_update_dep_set_rest(nghttp2_stream *stream) {
+  nghttp2_stream *si;
+
   if (stream == NULL) {
     return;
   }
@@ -167,14 +169,12 @@
 
   if (stream->dpri == NGHTTP2_STREAM_DPRI_TOP) {
     stream->dpri = NGHTTP2_STREAM_DPRI_REST;
-
-    stream_update_dep_set_rest(stream->sib_next);
-
     return;
   }
 
-  stream_update_dep_set_rest(stream->sib_next);
-  stream_update_dep_set_rest(stream->dep_next);
+  for (si = stream->dep_next; si; si = si->sib_next) {
+    stream_update_dep_set_rest(si);
+  }
 }
 
 /*
@@ -315,9 +315,146 @@
   return NULL;
 }
 
+#ifdef STREAM_DEP_DEBUG
+
+static size_t check_stream_num(nghttp2_stream *stream) {
+  size_t n = 1;
+  nghttp2_stream *si;
+  for (si = stream->dep_next; si; si = si->sib_next) {
+    n += check_stream_num(si);
+  }
+  if (n != stream->num_substreams) {
+    fprintf(stderr, "num_substreams = %zu; want %zu\n", n,
+            stream->num_substreams);
+
+    assert(0);
+  }
+  return n;
+}
+
+static void ensure_rest_or_no_item(nghttp2_stream *stream) {
+  nghttp2_stream *si;
+  switch (stream->dpri) {
+  case NGHTTP2_STREAM_DPRI_TOP:
+    fprintf(stderr, "NGHTTP2_STREAM_DPRI_TOP; want REST or NO_ITEM\n");
+    assert(0);
+    break;
+  case NGHTTP2_STREAM_DPRI_REST:
+  case NGHTTP2_STREAM_DPRI_NO_ITEM:
+    for (si = stream->dep_next; si; si = si->sib_next) {
+      ensure_rest_or_no_item(si);
+    }
+    break;
+  default:
+    fprintf(stderr, "invalid dpri %d\n", stream->dpri);
+    assert(0);
+  }
+}
+
+static void check_dpri(nghttp2_stream *stream) {
+  nghttp2_stream *si;
+  switch (stream->dpri) {
+  case NGHTTP2_STREAM_DPRI_TOP:
+    if (!stream->item->queued) {
+      fprintf(stderr, "stream->item->queued is not nonzero while it is in "
+                      "NGHTTP2_STREAM_DPRI_TOP\n");
+      assert(0);
+    }
+  /* fall through */
+  case NGHTTP2_STREAM_DPRI_REST:
+    for (si = stream->dep_next; si; si = si->sib_next) {
+      ensure_rest_or_no_item(si);
+    }
+    break;
+  case NGHTTP2_STREAM_DPRI_NO_ITEM:
+    for (si = stream->dep_next; si; si = si->sib_next) {
+      check_dpri(si);
+    }
+    break;
+  default:
+    fprintf(stderr, "invalid dpri %d\n", stream->dpri);
+    assert(0);
+  }
+}
+
+static void check_sum_dep(nghttp2_stream *stream) {
+  nghttp2_stream *si;
+  int32_t n = 0;
+  for (si = stream->dep_next; si; si = si->sib_next) {
+    n += si->weight;
+  }
+  if (n != stream->sum_dep_weight) {
+    fprintf(stderr, "sum_dep_weight = %d; want %d\n", n,
+            stream->sum_dep_weight);
+    assert(0);
+  }
+  for (si = stream->dep_next; si; si = si->sib_next) {
+    check_sum_dep(si);
+  }
+}
+
+static int check_sum_norest(nghttp2_stream *stream) {
+  nghttp2_stream *si;
+  int32_t n = 0;
+  switch (stream->dpri) {
+  case NGHTTP2_STREAM_DPRI_TOP:
+    return 1;
+  case NGHTTP2_STREAM_DPRI_REST:
+    return 0;
+  case NGHTTP2_STREAM_DPRI_NO_ITEM:
+    for (si = stream->dep_next; si; si = si->sib_next) {
+      if (check_sum_norest(si)) {
+        n += si->weight;
+      }
+    }
+    break;
+  default:
+    fprintf(stderr, "invalid dpri %d\n", stream->dpri);
+    assert(0);
+  }
+  if (n != stream->sum_norest_weight) {
+    fprintf(stderr, "sum_norest_weight = %d; want %d\n", n,
+            stream->sum_norest_weight);
+    assert(0);
+  }
+  return n > 0;
+}
+
+static void check_dep_prev(nghttp2_stream *stream) {
+  nghttp2_stream *si;
+  for (si = stream->dep_next; si; si = si->sib_next) {
+    if (si->dep_prev != stream) {
+      fprintf(stderr, "si->dep_prev = %p; want %p\n", si->dep_prev, stream);
+      assert(0);
+    }
+    check_dep_prev(si);
+  }
+}
+
+#endif /* STREAM_DEP_DEBUG */
+
+#ifdef STREAM_DEP_DEBUG
+static void validate_tree(nghttp2_stream *stream) {
+  if (!stream) {
+    return;
+  }
+
+  for (; stream->dep_prev; stream = stream->dep_prev)
+    ;
+
+  check_stream_num(stream);
+  check_dpri(stream);
+  check_sum_dep(stream);
+  check_sum_norest(stream);
+  check_dep_prev(stream);
+}
+#else /* !STREAM_DEP_DEBUG */
+static void validate_tree(nghttp2_stream *stream _U_) {}
+#endif /* !STREAM_DEP_DEBUG*/
+
 static int stream_update_dep_on_attach_item(nghttp2_stream *stream,
                                             nghttp2_session *session) {
-  nghttp2_stream *blocking_stream;
+  nghttp2_stream *blocking_stream, *si;
   int rv;
 
   stream->dpri = NGHTTP2_STREAM_DPRI_REST;
@@ -327,6 +464,7 @@
   /* If we found REST or TOP in ascendants, we don't have to update
      any metadata. */
   if (blocking_stream) {
+    validate_tree(stream);
     return 0;
   }
 
@@ -334,7 +472,9 @@
   if (stream->sum_norest_weight == 0) {
     stream_update_dep_sum_norest_weight(stream->dep_prev, stream->weight);
   } else {
-    stream_update_dep_set_rest(stream->dep_next);
+    for (si = stream->dep_next; si; si = si->sib_next) {
+      stream_update_dep_set_rest(si);
+    }
   }
 
   if (!stream->item->queued) {
@@ -346,13 +486,17 @@
     }
   }
 
+  validate_tree(stream);
   return 0;
 }
 
 static int stream_update_dep_on_detach_item(nghttp2_stream *stream,
                                             nghttp2_session *session) {
+  int rv;
+
   if (stream->dpri == NGHTTP2_STREAM_DPRI_REST) {
     stream->dpri = NGHTTP2_STREAM_DPRI_NO_ITEM;
+    validate_tree(stream);
     return 0;
   }
 
@@ -360,6 +504,7 @@
     /* nghttp2_stream_defer_item() does not clear stream->item, but
        set dpri = NGHTTP2_STREAM_DPRI_NO_ITEM.  Catch this case
        here. */
+    validate_tree(stream);
     return 0;
   }
 
@@ -367,10 +512,18 @@
 
   if (stream_update_dep_set_top(stream) == 0) {
     stream_update_dep_sum_norest_weight(stream->dep_prev, -stream->weight);
+    validate_tree(stream);
     return 0;
   }
 
-  return stream_update_dep_queue_top(stream->dep_next, session);
+  rv = stream_update_dep_queue_top(stream, session);
+  if (rv != 0) {
+    return rv;
+  }
+
+  validate_tree(stream);
+
+  return 0;
 }
 
 int nghttp2_stream_attach_item(nghttp2_stream *stream,
@@ -550,6 +703,8 @@
   stream_update_dep_length(dep_stream, 1);
 
   ++stream->roots->num_streams;
+
+  validate_tree(stream);
 }
 
 static void set_dep_prev(nghttp2_stream *stream, nghttp2_stream *dep) {
@@ -679,6 +834,8 @@
   }
 
   ++stream->roots->num_streams;
+
+  validate_tree(stream);
 }
 
 void nghttp2_stream_dep_remove(nghttp2_stream *stream) {
@@ -726,8 +883,10 @@
 
   if (stream->sib_prev) {
     unlink_sib(stream);
+    validate_tree(stream->sib_prev->dep_prev);
   } else if (stream->dep_prev) {
     unlink_dep(stream);
+    validate_tree(stream->dep_prev);
   } else {
     nghttp2_stream_roots_remove(stream->roots, stream);
 
@@ -743,6 +902,8 @@
 
       nghttp2_stream_roots_add(si->roots, si);
 
+      validate_tree(si);
+
       si = next;
     }
   }
@@ -767,6 +928,7 @@
   nghttp2_stream *blocking_stream;
   nghttp2_stream *si;
   size_t delta_substreams;
+  int rv;
 
   DEBUGF(fprintf(stderr, "stream: dep_insert_subtree dep_stream(%p)=%d "
                          "stream(%p)=%d\n",
@@ -776,6 +938,10 @@
 
   blocking_stream = stream_get_dep_blocking(dep_stream);
 
+  if (blocking_stream) {
+    stream_update_dep_set_rest(stream);
+  }
+
   if (dep_stream->dep_next) {
     /* dep_stream->num_substreams includes dep_stream itself */
     stream->num_substreams += dep_stream->num_substreams - 1;
@@ -786,7 +952,9 @@
     dep_next = dep_stream->dep_next;
 
     if (!blocking_stream && dep_stream->sum_norest_weight) {
-      stream_update_dep_set_rest(dep_next);
+      for (si = dep_next; si; si = si->sib_next) {
+        stream_update_dep_set_rest(si);
+      }
     }
 
     link_dep(dep_stream, stream);
@@ -812,25 +980,33 @@
   stream_update_dep_length(dep_stream, delta_substreams);
 
   if (blocking_stream) {
-    stream_update_dep_set_rest(stream);
-
+    validate_tree(dep_stream);
     return 0;
   }
 
   if (stream_update_dep_set_top(stream) == 0) {
+    validate_tree(dep_stream);
     return 0;
   }
 
   dep_stream->sum_norest_weight = stream->weight;
   stream_update_dep_sum_norest_weight(dep_stream->dep_prev, 
dep_stream->weight);
 
-  return stream_update_dep_queue_top(stream, session);
+  rv = stream_update_dep_queue_top(stream, session);
+  if (rv != 0) {
+    return rv;
+  }
+
+  validate_tree(dep_stream);
+
+  return 0;
 }
 
 int nghttp2_stream_dep_add_subtree(nghttp2_stream *dep_stream,
                                    nghttp2_stream *stream,
                                    nghttp2_session *session) {
   nghttp2_stream *blocking_stream;
+  int rv;
 
   DEBUGF(fprintf(stderr, "stream: dep_add_subtree dep_stream(%p)=%d "
                          "stream(%p)=%d\n",
@@ -856,15 +1032,18 @@
        NGHTTP2_DPRI_TOP.  Just dfs under stream here. */
     stream_update_dep_set_rest(stream);
 
+    validate_tree(dep_stream);
     return 0;
   }
 
   if (stream->dpri == NGHTTP2_STREAM_DPRI_TOP) {
     stream_update_dep_sum_norest_weight(dep_stream, stream->weight);
+    validate_tree(dep_stream);
     return 0;
   }
 
   if (stream_update_dep_set_top(stream) == 0) {
+    validate_tree(dep_stream);
     return 0;
   }
 
@@ -872,7 +1051,14 @@
      sum_norest_weight */
   stream_update_dep_sum_norest_weight(dep_stream, stream->weight);
 
-  return stream_update_dep_queue_top(stream, session);
+  rv = stream_update_dep_queue_top(stream, session);
+  if (rv != 0) {
+    return rv;
+  }
+
+  validate_tree(dep_stream);
+
+  return 0;
 }
 
 void nghttp2_stream_dep_remove_subtree(nghttp2_stream *stream) {
@@ -911,6 +1097,8 @@
                               stream->sum_norest_weight))) {
       stream_update_dep_sum_norest_weight(dep_prev, -stream->weight);
     }
+
+    validate_tree(dep_prev);
   }
 
   stream->sib_prev = NULL;
@@ -920,16 +1108,26 @@
 
 int nghttp2_stream_dep_make_root(nghttp2_stream *stream,
                                  nghttp2_session *session) {
+  int rv;
+
   DEBUGF(fprintf(stderr, "stream: dep_make_root stream(%p)=%d\n", stream,
                  stream->stream_id));
 
   nghttp2_stream_roots_add(stream->roots, stream);
 
   if (stream_update_dep_set_top(stream) == 0) {
+    validate_tree(stream);
     return 0;
   }
 
-  return stream_update_dep_queue_top(stream, session);
+  rv = stream_update_dep_queue_top(stream, session);
+  if (rv != 0) {
+    return rv;
+  }
+
+  validate_tree(stream);
+
+  return 0;
 }
 
 int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/python/Makefile.in 
new/nghttp2-1.0.5/python/Makefile.in
--- old/nghttp2-1.0.4/python/Makefile.in        2015-06-23 16:24:25.000000000 
+0200
+++ new/nghttp2-1.0.5/python/Makefile.in        2015-06-27 04:00:10.000000000 
+0200
@@ -431,9 +431,9 @@
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_PYTHON_BINDINGS_FALSE@install-exec-local:
 @ENABLE_PYTHON_BINDINGS_FALSE@uninstall-local:
 @ENABLE_PYTHON_BINDINGS_FALSE@clean-local:
-@ENABLE_PYTHON_BINDINGS_FALSE@install-exec-local:
 clean: clean-am
 
 clean-am: clean-generic clean-libtool clean-local mostlyclean-am
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/src/shrpx_connection_handler.cc 
new/nghttp2-1.0.5/src/shrpx_connection_handler.cc
--- old/nghttp2-1.0.4/src/shrpx_connection_handler.cc   2015-06-23 
16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/src/shrpx_connection_handler.cc   2015-06-27 
03:59:57.000000000 +0200
@@ -543,6 +543,14 @@
     auto ssl_ctx = all_ssl_ctx_[ocsp_.next];
     auto tls_ctx_data =
         static_cast<ssl::TLSContextData *>(SSL_CTX_get_app_data(ssl_ctx));
+
+    // client SSL_CTX is also included in all_ssl_ctx_, but has no
+    // tls_ctx_data.
+    if (!tls_ctx_data) {
+      ++ocsp_.next;
+      continue;
+    }
+
     auto cert_file = tls_ctx_data->cert_file;
 
     if (start_ocsp_update(cert_file) != 0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nghttp2-1.0.4/tests/nghttp2_session_test.c 
new/nghttp2-1.0.5/tests/nghttp2_session_test.c
--- old/nghttp2-1.0.4/tests/nghttp2_session_test.c      2015-06-23 
16:24:06.000000000 +0200
+++ new/nghttp2-1.0.5/tests/nghttp2_session_test.c      2015-06-27 
03:59:57.000000000 +0200
@@ -6429,6 +6429,46 @@
   CU_ASSERT(0 == b->sum_norest_weight);
 
   nghttp2_session_del(session);
+
+  nghttp2_session_server_new(&session, &callbacks, NULL);
+
+  a = open_stream(session, 1);
+  b = open_stream_with_dep(session, 3, a);
+  c = open_stream_with_dep(session, 5, a);
+  d = open_stream_with_dep(session, 7, c);
+
+  /* a
+   * |
+   * c--b
+   * |
+   * d
+   */
+
+  da = create_data_ob_item(mem);
+  db = create_data_ob_item(mem);
+  dc = create_data_ob_item(mem);
+
+  nghttp2_stream_attach_item(a, da, session);
+  nghttp2_stream_attach_item(b, db, session);
+  nghttp2_stream_attach_item(c, dc, session);
+
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_TOP == a->dpri);
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_REST == b->dpri);
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_REST == c->dpri);
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_NO_ITEM == d->dpri);
+
+  /* check that all children's item get queued */
+  nghttp2_stream_detach_item(a, session);
+
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_NO_ITEM == a->dpri);
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_TOP == b->dpri);
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_TOP == c->dpri);
+  CU_ASSERT(NGHTTP2_STREAM_DPRI_NO_ITEM == d->dpri);
+
+  CU_ASSERT(1 == db->queued);
+  CU_ASSERT(1 == dc->queued);
+
+  nghttp2_session_del(session);
 }
 
 void test_nghttp2_session_stream_attach_item_subtree(void) {


Reply via email to