Parcourir la source

attempt to fix failure in insert

wip/issue7_chasing
Brice Figureau il y a 15 ans
Parent
révision
cd8edb6ef9
1 fichiers modifiés avec 34 ajouts et 16 suppressions
  1. 34
    16
      ngx_http_uploadprogress_module.c

+ 34
- 16
ngx_http_uploadprogress_module.c Voir le fichier

@@ -917,36 +917,54 @@ ngx_http_uploadprogress_rbtree_insert_value(ngx_rbtree_node_t * temp,
917 917
                                             ngx_rbtree_node_t * node,
918 918
                                             ngx_rbtree_node_t * sentinel)
919 919
 {
920
-    ngx_rbtree_node_t              **p;
921
-    ngx_http_uploadprogress_node_t  *upn, *upnt;
920
+     ngx_http_uploadprogress_node_t  *upn, *upnt;
922 921
 
923
-    for (;;) {
922
+     for (;;) {
923
+
924
+         if (node->key < temp->key) {
924 925
 
925
-        if (node->key < temp->key) {
926
+            if (temp->left == sentinel) {
927
+                temp->left = node;
928
+                break;
929
+            }
926 930
 
927
-            p = &temp->left;
931
+            temp = temp->left;
928 932
 
929 933
         } else if (node->key > temp->key) {
930 934
 
931
-            p = &temp->right;
935
+            if (temp->right == sentinel) {
936
+                temp->right = node;
937
+                break;
938
+            }
932 939
 
933
-        } else { /* node->key == temp->key */
940
+            temp = temp->right;
941
+
942
+        } else {                /* node->key == temp->key */
934 943
 
935 944
             upn = (ngx_http_uploadprogress_node_t *) node;
936 945
             upnt = (ngx_http_uploadprogress_node_t *) temp;
937 946
 
938
-            p = (ngx_memn2cmp(upn->data, upnt->data, upn->len, upnt->len) < 0)
939
-                ? &temp->left : &temp->right;
940
-        }
947
+            if (ngx_memn2cmp(upn->data, upnt->data, upn->len, upnt->len) < 0) {
941 948
 
942
-        if (*p == sentinel) {
943
-            break;
944
-        }
949
+                if (temp->left == sentinel) {
950
+                    temp->left = node;
951
+                    break;
952
+                }
945 953
 
946
-        temp = *p;
947
-    }
954
+                temp = temp->left;
955
+
956
+            } else {
957
+
958
+                if (temp->right == sentinel) {
959
+                    temp->right = node;
960
+                    break;
961
+                }
948 962
 
949
-    *p = node;
963
+                temp = temp->right;
964
+            }
965
+        }
966
+    }
967
+    
950 968
     node->parent = temp;
951 969
     node->left = sentinel;
952 970
     node->right = sentinel;

Chargement…
Annuler
Enregistrer