]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - buffer_tree.c
btr support for the UDP receiver.
[paraslash.git] / buffer_tree.c
index 022a4118a76d0191d197b5cda6bc64b77eff924c..23599b834a26e31adda87ecdb49da7238b0d1d10 100644 (file)
@@ -412,18 +412,25 @@ void btr_log_tree(struct btr_node *btrn, int loglevel)
 /** 640K ought to be enough for everybody ;) */
 #define BTRN_MAX_PENDING (640 * 1024)
 
-int btr_node_status(struct btr_node *btrn, size_t min_iqs)
+int btr_node_status(struct btr_node *btrn, size_t min_iqs,
+       enum btr_node_type type)
 {
        size_t iqs;
 
-       if (btr_eof(btrn))
-               return -E_BTR_EOF;
-       if (btr_bytes_pending(btrn) > BTRN_MAX_PENDING)
-               return 0;
-       iqs = btr_get_input_queue_size(btrn);
-       if (iqs == 0) /* we have a parent, because not eof */
-               return 0;
-       if (iqs < min_iqs && !btr_no_parent(btrn))
-               return 0;
+       if (type != BTR_NT_LEAF) {
+               if (btr_no_children(btrn))
+                       return -E_BTR_NO_CHILD;
+               if (btr_bytes_pending(btrn) > BTRN_MAX_PENDING)
+                       return 0;
+       }
+       if (type != BTR_NT_ROOT) {
+               if (btr_eof(btrn))
+                       return -E_BTR_EOF;
+               iqs = btr_get_input_queue_size(btrn);
+               if (iqs == 0) /* we have a parent, because not eof */
+                       return 0;
+               if (iqs < min_iqs && !btr_no_parent(btrn))
+                       return 0;
+       }
        return 1;
 }