annotate libfdcore/p_sr.c @ 1240:0420ccc4671a

Add a counter for the sent requests for which we did not wait for an answer. It might be relevant this value contributes to the load estimate of the remote peer, but it is not very reliable
author Sebastien Decugis <sdecugis@freediameter.net>
date Thu, 10 Oct 2013 16:30:55 +0200
parents b059b9e8ef83
children c9a160b815ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
740
4a9f08d6b6ba Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1127
1af09cc156d6 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1119
diff changeset
5 * Copyright (c) 2013, WIDE Project and NICT *
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 650
diff changeset
36 #include "fdcore-internal.h"
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
37
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
38 /* Structure to store a sent request */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
39 struct sentreq {
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
40 struct fd_list chain; /* the "o" field points directly to the (new) hop-by-hop of the request (uint32_t *) */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
41 struct msg *req; /* A request that was sent and not yet answered. */
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
42 uint32_t prevhbh;/* The value to set back in the hbh header when the message is retrieved */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
43 struct fd_list expire; /* the list of expiring requests */
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
44 struct timespec timeout; /* Cache the expire date of the request so that the timeout thread does not need to get it each time. */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
45 struct timespec added_on; /* the time the request was added */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
46 };
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
47
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
48 /* Find an element in the hbh list, or the following one */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
49 static struct fd_list * find_or_next(struct fd_list * srlist, uint32_t hbh, int * match)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
50 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
51 struct fd_list * li;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
52 *match = 0;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
53 for (li = srlist->next; li != srlist; li = li->next) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
54 uint32_t * nexthbh = li->o;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
55 if (*nexthbh < hbh)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
56 continue;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
57 if (*nexthbh == hbh)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
58 *match = 1;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
59 break;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
60 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
61 return li;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
62 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
63
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
64 /* Similar but start from the end, since we add requests in growing hbh order usually */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
65 static struct fd_list * find_or_prev(struct fd_list * srlist, uint32_t hbh, int * match)
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
66 {
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
67 struct fd_list * li;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
68 *match = 0;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
69 for (li = srlist->prev; li != srlist; li = li->prev) {
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
70 uint32_t * prevhbh = li->o;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
71 if (*prevhbh > hbh)
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
72 continue;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
73 if (*prevhbh == hbh)
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
74 *match = 1;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
75 break;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
76 }
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
77 return li;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
78 }
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
79
71
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
80 static void srl_dump(const char * text, struct fd_list * srlist)
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
81 {
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
82 struct fd_list * li;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
83 struct timespec now;
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
84
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
85 LOG_D("%sSentReq list @%p:", text, srlist);
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
86
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
87 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &now), );
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
88
71
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
89 for (li = srlist->next; li != srlist; li = li->next) {
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
90 struct sentreq * sr = (struct sentreq *)li;
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
91 uint32_t * nexthbh = li->o;
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
92
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
93 LOG_D(" - Next req (hbh:0x%x, prev:0x%x): [since %ld.%06ld sec]", *nexthbh, sr->prevhbh,
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
94 (long)((now.tv_nsec >= sr->added_on.tv_nsec) ? (now.tv_sec - sr->added_on.tv_sec) : (now.tv_sec - sr->added_on.tv_sec - 1)),
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
95 (long)((now.tv_nsec >= sr->added_on.tv_nsec) ? ((now.tv_nsec - sr->added_on.tv_nsec) / 1000) : ((now.tv_nsec - sr->added_on.tv_nsec + 1000000000) / 1000)));
71
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
96 }
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
97 }
cba30013d8f5 Added debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
98
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
99 /* thread that handles messages expiring. The thread is started only when needed */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
100 static void * sr_expiry_th(void * arg) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
101 struct sr_list * srlist = arg;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
102
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
103 TRACE_ENTRY("%p", arg);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
104 CHECK_PARAMS_DO( arg, return NULL );
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
105
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
106 /* Set the thread name */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
107 {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
108 char buf[48];
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
109 snprintf(buf, sizeof(buf), "ReqExp/%s", ((struct fd_peer *)(srlist->exp.o))->p_hdr.info.pi_diamid);
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
110 fd_log_threadname ( buf );
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
111 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
112
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
113 do {
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
114 struct timespec now;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
115 struct sentreq * first;
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
116 struct msg * request;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
117 struct fd_peer * sentto;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
118 void (*expirecb)(void *, DiamId_t, size_t, struct msg **);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
119 void (*anscb)(void *, struct msg **);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
120 void * data;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
121 int no_error;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
122
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
123 CHECK_POSIX_DO( pthread_mutex_lock(&srlist->mtx), return NULL );
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
124 pthread_cleanup_push( fd_cleanup_mutex, &srlist->mtx );
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
125
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
126 loop:
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
127 no_error = 0;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
128
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
129 /* Check if there are expiring requests available */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
130 if (FD_IS_LIST_EMPTY(&srlist->exp)) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
131 /* Just wait for a change or cancelation */
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
132 CHECK_POSIX_DO( pthread_cond_wait( &srlist->cnd, &srlist->mtx ), goto unlock );
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
133 /* Restart the loop on wakeup */
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
134 goto loop;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
135 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
136
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
137 /* Get the pointer to the request that expires first */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
138 first = (struct sentreq *)(srlist->exp.next->o);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
139
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
140 /* Get the current time */
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
141 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &now), goto unlock );
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
142
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
143 /* If first request is not expired, we just wait until it happens */
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
144 if ( TS_IS_INFERIOR( &now, &first->timeout ) ) {
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
145
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
146 CHECK_POSIX_DO2( pthread_cond_timedwait( &srlist->cnd, &srlist->mtx, &first->timeout ),
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
147 ETIMEDOUT, /* ETIMEDOUT is a normal return value, continue */,
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
148 /* on other error, */ goto unlock );
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
149
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
150 /* on wakeup, loop */
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
151 goto loop;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
152 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
153
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
154 /* Now, the first request in the list is expired; remove it and call the expirecb for it */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
155 request = first->req;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
156 sentto = first->chain.head->o;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
157
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
158 TRACE_DEBUG(FULL, "Request %x was not answered by %s within the timer delay", *((uint32_t *)first->chain.o), sentto->p_hdr.info.pi_diamid);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
159
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
160 /* Restore the hbhid */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
161 *((uint32_t *)first->chain.o) = first->prevhbh;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
162
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
163 /* Free the sentreq information */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
164 fd_list_unlink(&first->chain);
1239
b059b9e8ef83 Update the sent request counter in case of expiry
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1238
diff changeset
165 srlist->cnt--;
1240
0420ccc4671a Add a counter for the sent requests for which we did not wait for an answer. It might be relevant this value contributes to the load estimate of the remote peer, but it is not very reliable
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1239
diff changeset
166 srlist->cnt_lost++; /* We are not waiting for this answer anymore, but the remote peer may still be processing it. */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
167 fd_list_unlink(&first->expire);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
168 free(first);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
169
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
170 no_error = 1;
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
171 unlock:
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
172 ; /* pthread_cleanup_pop sometimes expands as "} ..." and the label before this cause some compilers to complain... */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
173 pthread_cleanup_pop( 1 ); /* unlock the mutex */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
174 if (!no_error)
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
175 break;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
176
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
177
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
178 /* Retrieve callback in the message */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
179 CHECK_FCT_DO( fd_msg_anscb_get( request, &anscb, &expirecb, &data ), break);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
180 ASSERT(expirecb);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
181
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
182 /* Clean up this expirecb from the message */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
183 CHECK_FCT_DO( fd_msg_anscb_associate( request, anscb, data, NULL, NULL ), break);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
184
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
185 /* Call it */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
186 (*expirecb)(data, sentto->p_hdr.info.pi_diamid, sentto->p_hdr.info.pi_diamidlen, &request);
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
187
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
188 /* If the callback did not dispose of the message, do it now */
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
189 if (request) {
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
190 fd_hook_call(HOOK_MESSAGE_DROPPED, request, NULL, "Expiration period completed without an answer, and the expiry callback did not dispose of the message.", fd_msg_pmdl_get(request));
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
191 CHECK_FCT_DO( fd_msg_free(request), /* ignore */ );
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
192 }
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
193
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
194 } while (1);
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
195
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
196 ASSERT(0); /* we have encountered a problem, maybe time to signal the framework to terminate? */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
197 return NULL;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
198 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
199
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
200
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
201 /* Store a new sent request */
165
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
202 int fd_p_sr_store(struct sr_list * srlist, struct msg **req, uint32_t *hbhloc, uint32_t hbh_restore)
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
203 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
204 struct sentreq * sr;
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
205 struct fd_list * prev;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
206 int match;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
207 struct timespec * ts;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
208
165
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
209 TRACE_ENTRY("%p %p %p %x", srlist, req, hbhloc, hbh_restore);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
210 CHECK_PARAMS(srlist && req && *req && hbhloc);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
211
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
212 CHECK_MALLOC( sr = malloc(sizeof(struct sentreq)) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
213 memset(sr, 0, sizeof(struct sentreq));
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
214 fd_list_init(&sr->chain, hbhloc);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
215 sr->req = *req;
165
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
216 sr->prevhbh = hbh_restore;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
217 fd_list_init(&sr->expire, sr);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
218 CHECK_SYS( clock_gettime(CLOCK_REALTIME, &sr->added_on) );
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
219
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
220 /* Search the place in the list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
221 CHECK_POSIX( pthread_mutex_lock(&srlist->mtx) );
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
222 prev = find_or_prev(&srlist->srs, *hbhloc, &match);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
223 if (match) {
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
224 TRACE_DEBUG(INFO, "A request with the same hop-by-hop Id (0x%x) was already sent: error", *hbhloc);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
225 free(sr);
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
226 srl_dump("Current list of SR: ", &srlist->srs);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
227 CHECK_POSIX_DO( pthread_mutex_unlock(&srlist->mtx), /* ignore */ );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
228 return EINVAL;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
229 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
230
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
231 /* Save in the list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
232 *req = NULL;
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
233 fd_list_insert_after(prev, &sr->chain);
938
4158151cc694 Add counter for number of requests pending answers
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
234 srlist->cnt++;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
235
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
236 /* In case of request with a timeout, also store in the timeout list */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
237 ts = fd_msg_anscb_gettimeout( sr->req );
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
238 if (ts) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
239 struct fd_list * li;
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
240
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
241 memcpy(&sr->timeout, ts, sizeof(struct timespec));
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
242
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
243 /* browse srlist->exp from the end */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
244 for (li = srlist->exp.prev; li != &srlist->exp; li = li->prev) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
245 struct sentreq * s = (struct sentreq *)(li->o);
1232
9e92fa478c23 Performance improvements for fd_p_sr_store based on Guangming proposal http://lists.freediameter.net/pipermail/dev/2013-July/000225.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1207
diff changeset
246 if (TS_IS_INFERIOR(&s->timeout, ts))
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
247 break;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
248 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
249
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
250 fd_list_insert_after(li, &sr->expire);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
251
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
252 /* if the thread does not exist yet, create it */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
253 if (srlist->thr == (pthread_t)NULL) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
254 CHECK_POSIX_DO( pthread_create(&srlist->thr, NULL, sr_expiry_th, srlist), /* continue anyway */);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
255 } else {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
256 /* or, if added in first position, signal the condvar to update the sleep time of the thread */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
257 if (li == &srlist->exp) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
258 CHECK_POSIX_DO( pthread_cond_signal(&srlist->cnd), /* continue anyway */);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
259 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
260 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
261 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
262
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
263 CHECK_POSIX( pthread_mutex_unlock(&srlist->mtx) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
264 return 0;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
265 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
266
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
267 /* Fetch a request by hbh */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
268 int fd_p_sr_fetch(struct sr_list * srlist, uint32_t hbh, struct msg **req)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
269 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
270 struct sentreq * sr;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
271 int match;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
272
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
273 TRACE_ENTRY("%p %x %p", srlist, hbh, req);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
274 CHECK_PARAMS(srlist && req);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
275
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
276 /* Search the request in the list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
277 CHECK_POSIX( pthread_mutex_lock(&srlist->mtx) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
278 sr = (struct sentreq *)find_or_next(&srlist->srs, hbh, &match);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
279 if (!match) {
165
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
280 TRACE_DEBUG(INFO, "There is no saved request with this hop-by-hop id (%x)", hbh);
1207
043b894b0511 Cleanups in failover situation to avoid deadlocks and corrupt messages ids. Tested OK now.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
281 srl_dump("Current list of SR: ", &srlist->srs);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
282 *req = NULL;
1240
0420ccc4671a Add a counter for the sent requests for which we did not wait for an answer. It might be relevant this value contributes to the load estimate of the remote peer, but it is not very reliable
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1239
diff changeset
283 if (srlist->cnt_lost > 0) {
0420ccc4671a Add a counter for the sent requests for which we did not wait for an answer. It might be relevant this value contributes to the load estimate of the remote peer, but it is not very reliable
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1239
diff changeset
284 srlist->cnt_lost--; /* This is probably an answer for a request we already timedout. */
0420ccc4671a Add a counter for the sent requests for which we did not wait for an answer. It might be relevant this value contributes to the load estimate of the remote peer, but it is not very reliable
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1239
diff changeset
285 } /* else, probably a bug in the remote peer */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
286 } else {
165
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
287 /* Restore hop-by-hop id */
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
288 *((uint32_t *)sr->chain.o) = sr->prevhbh;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
289 /* Unlink */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
290 fd_list_unlink(&sr->chain);
938
4158151cc694 Add counter for number of requests pending answers
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
291 srlist->cnt--;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
292 fd_list_unlink(&sr->expire);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
293 *req = sr->req;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
294 free(sr);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
295 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
296 CHECK_POSIX( pthread_mutex_unlock(&srlist->mtx) );
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
297
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
298 /* do not stop the expire thread here, it might cause creating/destroying it very often otherwise */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
299
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
300 /* Done */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
301 return 0;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
302 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
303
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
304 /* Failover requests (free or requeue routables) */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
305 void fd_p_sr_failover(struct sr_list * srlist)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
306 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
307 CHECK_POSIX_DO( pthread_mutex_lock(&srlist->mtx), /* continue anyway */ );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
308 while (!FD_IS_LIST_EMPTY(&srlist->srs)) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
309 struct sentreq * sr = (struct sentreq *)(srlist->srs.next);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
310 fd_list_unlink(&sr->chain);
938
4158151cc694 Add counter for number of requests pending answers
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
311 srlist->cnt--;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
312 fd_list_unlink(&sr->expire);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
313 if (fd_msg_is_routable(sr->req)) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
314 struct msg_hdr * hdr = NULL;
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
315 int ret;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
316
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
317 /* Set the 'T' flag */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
318 CHECK_FCT_DO(fd_msg_hdr(sr->req, &hdr), /* continue */);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
319 if (hdr)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
320 hdr->msg_flags |= CMD_FLAG_RETRANSMIT;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
321
1153
7a7ec1ad0c44 Another missing restore of the hop-by-hop ID upon failover situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
322 /* Restore the original hop-by-hop id of the request */
7a7ec1ad0c44 Another missing restore of the hop-by-hop ID upon failover situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
323 *((uint32_t *)sr->chain.o) = sr->prevhbh;
7a7ec1ad0c44 Another missing restore of the hop-by-hop ID upon failover situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
324
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
325 fd_hook_call(HOOK_MESSAGE_FAILOVER, sr->req, (struct fd_peer *)srlist->srs.o, NULL, fd_msg_pmdl_get(sr->req));
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
326
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
327 /* Requeue for sending to another peer */
1188
f40de74bd1c7 Don't block PSM during failover
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1153
diff changeset
328 CHECK_FCT_DO( ret = fd_fifo_post_noblock(fd_g_outgoing, (void *)&sr->req),
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
329 {
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
330 char buf[256];
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
331 snprintf(buf, sizeof(buf), "Internal error: error while requeuing during failover: %s", strerror(ret));
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
332 fd_hook_call(HOOK_MESSAGE_DROPPED, sr->req, NULL, buf, fd_msg_pmdl_get(sr->req));
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
333 CHECK_FCT_DO(fd_msg_free(sr->req), /* What can we do more? */)
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
334 });
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
335 } else {
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
336 /* Just free the request. */
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
337 /* fd_hook_call(HOOK_MESSAGE_DROPPED, sr->req, NULL, "Sent & unanswered local message discarded during failover.", fd_msg_pmdl_get(sr->req)); */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
338 CHECK_FCT_DO(fd_msg_free(sr->req), /* Ignore */);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
339 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
340 free(sr);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
341 }
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
342 /* The list of expiring requests must be empty now */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
343 ASSERT( FD_IS_LIST_EMPTY(&srlist->exp) );
1238
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1232
diff changeset
344 ASSERT( srlist->cnt == 0 ); /* debug the counter management if needed */
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
345
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
346 CHECK_POSIX_DO( pthread_mutex_unlock(&srlist->mtx), /* continue anyway */ );
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
347
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
348 /* Terminate the expiry thread (must be done when the lock can be taken) */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
349 CHECK_FCT_DO( fd_thr_term(&srlist->thr), /* ignore error */ );
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
350 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
351
"Welcome to our mercurial repository"