|
|
@@ -34,6 +34,7 @@ struct ngx_http_uploadprogress_node_s {
|
|
34
|
34
|
time_t timeout;
|
|
35
|
35
|
struct ngx_http_uploadprogress_node_s *prev;
|
|
36
|
36
|
struct ngx_http_uploadprogress_node_s *next;
|
|
|
37
|
+ ngx_log_t *log;
|
|
37
|
38
|
u_char len;
|
|
38
|
39
|
u_char data[1];
|
|
39
|
40
|
};
|
|
|
@@ -870,6 +871,7 @@ ngx_http_uploadprogress_handler(ngx_http_request_t * r)
|
|
870
|
871
|
up->rest = 0;
|
|
871
|
872
|
up->length = 0;
|
|
872
|
873
|
up->timeout = 0;
|
|
|
874
|
+ up->log = NULL;
|
|
873
|
875
|
|
|
874
|
876
|
up->next = ctx->list_head.next;
|
|
875
|
877
|
up->next->prev = up;
|
|
|
@@ -918,12 +920,35 @@ ngx_http_uploadprogress_rbtree_insert_value(ngx_rbtree_node_t * temp,
|
|
918
|
920
|
ngx_rbtree_node_t * sentinel)
|
|
919
|
921
|
{
|
|
920
|
922
|
ngx_http_uploadprogress_node_t *upn, *upnt;
|
|
|
923
|
+ ngx_log_t *log = NULL;
|
|
|
924
|
+
|
|
|
925
|
+ log = ((ngx_http_uploadprogress_node_t *)node)->log;
|
|
|
926
|
+
|
|
|
927
|
+ if (log != NULL) {
|
|
|
928
|
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
929
|
+ "upload-progree: rbtree insert %08XD to be inserted", node->key);
|
|
|
930
|
+ log_node(node, log);
|
|
|
931
|
+ }
|
|
921
|
932
|
|
|
922
|
933
|
for (;;) {
|
|
923
|
934
|
|
|
|
935
|
+ if (log != NULL) {
|
|
|
936
|
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
937
|
+ "upload-progree: rbtree insert %08XD compared to %08XD", node->key, temp->key);
|
|
|
938
|
+ log_node(temp, log);
|
|
|
939
|
+ }
|
|
924
|
940
|
if (node->key < temp->key) {
|
|
925
|
941
|
|
|
|
942
|
+ if (log != NULL) {
|
|
|
943
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
944
|
+ "upload-progree: rbtree insert going left");
|
|
|
945
|
+ }
|
|
|
946
|
+
|
|
926
|
947
|
if (temp->left == sentinel) {
|
|
|
948
|
+ if (log != NULL) {
|
|
|
949
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
950
|
+ "upload-progree: rbtree insert left end of tree");
|
|
|
951
|
+ }
|
|
927
|
952
|
temp->left = node;
|
|
928
|
953
|
break;
|
|
929
|
954
|
}
|
|
|
@@ -932,7 +957,16 @@ ngx_http_uploadprogress_rbtree_insert_value(ngx_rbtree_node_t * temp,
|
|
932
|
957
|
|
|
933
|
958
|
} else if (node->key > temp->key) {
|
|
934
|
959
|
|
|
|
960
|
+ if (log != NULL) {
|
|
|
961
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
962
|
+ "upload-progree: rbtree insert going right");
|
|
|
963
|
+ }
|
|
|
964
|
+
|
|
935
|
965
|
if (temp->right == sentinel) {
|
|
|
966
|
+ if (log != NULL) {
|
|
|
967
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
968
|
+ "upload-progree: rbtree insert right end of tree");
|
|
|
969
|
+ }
|
|
936
|
970
|
temp->right = node;
|
|
937
|
971
|
break;
|
|
938
|
972
|
}
|
|
|
@@ -941,12 +975,25 @@ ngx_http_uploadprogress_rbtree_insert_value(ngx_rbtree_node_t * temp,
|
|
941
|
975
|
|
|
942
|
976
|
} else { /* node->key == temp->key */
|
|
943
|
977
|
|
|
|
978
|
+ if (log != NULL) {
|
|
|
979
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
980
|
+ "upload-progree: equal hashes");
|
|
|
981
|
+ }
|
|
944
|
982
|
upn = (ngx_http_uploadprogress_node_t *) node;
|
|
945
|
983
|
upnt = (ngx_http_uploadprogress_node_t *) temp;
|
|
946
|
984
|
|
|
947
|
985
|
if (ngx_memn2cmp(upn->data, upnt->data, upn->len, upnt->len) < 0) {
|
|
948
|
986
|
|
|
|
987
|
+ if (log != NULL) {
|
|
|
988
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
989
|
+ "upload-progree: rbtree insert eq h node < temp, going left");
|
|
|
990
|
+ }
|
|
|
991
|
+
|
|
949
|
992
|
if (temp->left == sentinel) {
|
|
|
993
|
+ if (log != NULL) {
|
|
|
994
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
995
|
+ "upload-progree: rbtree insert end of left");
|
|
|
996
|
+ }
|
|
950
|
997
|
temp->left = node;
|
|
951
|
998
|
break;
|
|
952
|
999
|
}
|
|
|
@@ -955,7 +1002,15 @@ ngx_http_uploadprogress_rbtree_insert_value(ngx_rbtree_node_t * temp,
|
|
955
|
1002
|
|
|
956
|
1003
|
} else {
|
|
957
|
1004
|
|
|
|
1005
|
+ if (log != NULL) {
|
|
|
1006
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
1007
|
+ "upload-progree: rbtree insert eq h node > temp, going right");
|
|
|
1008
|
+ }
|
|
958
|
1009
|
if (temp->right == sentinel) {
|
|
|
1010
|
+ if (log != NULL) {
|
|
|
1011
|
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
1012
|
+ "upload-progree: rbtree insert end of right");
|
|
|
1013
|
+ }
|
|
959
|
1014
|
temp->right = node;
|
|
960
|
1015
|
break;
|
|
961
|
1016
|
}
|
|
|
@@ -964,6 +1019,11 @@ ngx_http_uploadprogress_rbtree_insert_value(ngx_rbtree_node_t * temp,
|
|
964
|
1019
|
}
|
|
965
|
1020
|
}
|
|
966
|
1021
|
}
|
|
|
1022
|
+
|
|
|
1023
|
+ if (log != NULL) {
|
|
|
1024
|
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
|
|
|
1025
|
+ "upload-progree: rbtree insert insert below %08XD", temp->key);
|
|
|
1026
|
+ }
|
|
967
|
1027
|
|
|
968
|
1028
|
node->parent = temp;
|
|
969
|
1029
|
node->left = sentinel;
|
|
|
@@ -1208,6 +1268,7 @@ ngx_http_uploadprogress_errortracker(ngx_http_request_t * r)
|
|
1208
|
1268
|
node->key = hash;
|
|
1209
|
1269
|
up->len = (u_char) id->len;
|
|
1210
|
1270
|
up->err_status = r->err_status;
|
|
|
1271
|
+ up->log = r->connection->log;
|
|
1211
|
1272
|
ngx_memcpy(up->data, id->data, id->len);
|
|
1212
|
1273
|
|
|
1213
|
1274
|
up->next = ctx->list_head.next;
|
|
|
@@ -1220,6 +1281,14 @@ ngx_http_uploadprogress_errortracker(ngx_http_request_t * r)
|
|
1220
|
1281
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
|
1221
|
1282
|
"trackuploads error-tracking: %08XD inserted in rbtree", hash);
|
|
1222
|
1283
|
|
|
|
1284
|
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
|
|
1285
|
+ "trackuploads error-tracking: checking if %08XD is correctly inserted in rbtree", hash);
|
|
|
1286
|
+
|
|
|
1287
|
+ if (find_node(id, ctx, r->connection->log) == NULL) {
|
|
|
1288
|
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
|
|
1289
|
+ "trackuploads error-tracking: %08XD hasn't been correctly added, this suggests an rbtree issue", hash);
|
|
|
1290
|
+ }
|
|
|
1291
|
+
|
|
1223
|
1292
|
/* start the timer if needed */
|
|
1224
|
1293
|
if (!upcf->cleanup.timer_set) {
|
|
1225
|
1294
|
upcf->cleanup.data = upcf->shm_zone;
|