annotate libfdcore/p_sr.c @ 1562:6219359a36a9 default tip

Merge latest changes from proposed branch
author Sebastien Decugis <sdecugis@freediameter.net>
date Mon, 21 Jun 2021 19:08:18 +0800
parents c9a160b815ea
children
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 * 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
120 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
121
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 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
123 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
124
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 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
126 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
127
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
128 /* 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
129 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
130 /* 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
131 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
132 /* 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
133 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
134 }
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 /* 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
137 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
138
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
139 /* 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
140 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
141
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
142 /* 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
143 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
144
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
145 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
146 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
147 /* 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
148
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
149 /* 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
150 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
151 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
152
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
153 /* 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
154 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
155 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
156
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 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
158
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 /* 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
160 *((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
161
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 /* 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
163 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
164 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
165 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
166 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
167 free(first);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
168
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
169 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
170 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
171 ; /* 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
172 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
173 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
174 break;
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
175
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
176
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 /* Retrieve callback in the message */
1248
c9a160b815ea Fix issue with anscb in the p_sr expiry mechanism. Thanks Guangming for the report.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1240
diff changeset
178 CHECK_FCT_DO( fd_msg_anscb_get( request, NULL, &expirecb, &data ), break);
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
179 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
180
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 /* Clean up this expirecb from the message */
1248
c9a160b815ea Fix issue with anscb in the p_sr expiry mechanism. Thanks Guangming for the report.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1240
diff changeset
182 CHECK_FCT_DO( fd_msg_anscb_reset( request, 0, 1 ), break);
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
183
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 /* 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
185 (*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
186
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 /* 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
188 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
189 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
190 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
191 }
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
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
193 } 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
194
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
195 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
196 return NULL;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
197 }
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
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
200 /* 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
201 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
202 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
203 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
204 struct fd_list * prev;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
205 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
206 struct timespec * ts;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
207
165
4679ff581d6a Fix invalid restore of the hop-by-hop id on forwarded answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 74
diff changeset
208 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
209 CHECK_PARAMS(srlist && req && *req && hbhloc);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
210
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
211 CHECK_MALLOC( sr = malloc(sizeof(struct sentreq)) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
212 memset(sr, 0, sizeof(struct sentreq));
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
213 fd_list_init(&sr->chain, hbhloc);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
214 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
215 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
216 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
217 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
218
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
219 /* Search the place in the list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
220 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
221 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
222 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
223 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
224 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
225 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
226 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
227 return EINVAL;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
228 }
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 /* Save in the list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
231 *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
232 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
233 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
234
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
235 /* 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
236 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
237 if (ts) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
238 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
239
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 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
241
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
242 /* 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
243 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
244 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
245 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
246 break;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
247 }
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 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
250
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
251 /* 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
252 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
253 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
254 } else {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
255 /* 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
256 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
257 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
258 }
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
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
262 CHECK_POSIX( pthread_mutex_unlock(&srlist->mtx) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
263 return 0;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
264 }
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 /* Fetch a request by hbh */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
267 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
268 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
269 struct sentreq * sr;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
270 int match;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
271
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
272 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
273 CHECK_PARAMS(srlist && req);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
274
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
275 /* Search the request in the list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
276 CHECK_POSIX( pthread_mutex_lock(&srlist->mtx) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
277 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
278 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
279 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
280 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
281 *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
282 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
283 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
284 } /* 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
285 } 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
286 /* 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
287 *((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
288 /* Unlink */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
289 fd_list_unlink(&sr->chain);
938
4158151cc694 Add counter for number of requests pending answers
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
290 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
291 fd_list_unlink(&sr->expire);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
292 *req = sr->req;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
293 free(sr);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
294 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
295 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
296
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
297 /* 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
298
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
299 /* Done */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
300 return 0;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
301 }
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 /* Failover requests (free or requeue routables) */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
304 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
305 {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
306 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
307 while (!FD_IS_LIST_EMPTY(&srlist->srs)) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
308 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
309 fd_list_unlink(&sr->chain);
938
4158151cc694 Add counter for number of requests pending answers
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
310 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
311 fd_list_unlink(&sr->expire);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
312 if (fd_msg_is_routable(sr->req)) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
313 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
314 int ret;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
315
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
316 /* Set the 'T' flag */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
317 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
318 if (hdr)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
319 hdr->msg_flags |= CMD_FLAG_RETRANSMIT;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
320
1153
7a7ec1ad0c44 Another missing restore of the hop-by-hop ID upon failover situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
321 /* 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
322 *((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
323
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
324 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
325
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
326 /* Requeue for sending to another peer */
1188
f40de74bd1c7 Don't block PSM during failover
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1153
diff changeset
327 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
328 {
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
329 char buf[256];
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
330 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
331 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
332 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
333 });
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
334 } else {
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
335 /* Just free the request. */
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1110
diff changeset
336 /* 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
337 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
338 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
339 free(sr);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
340 }
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
341 /* 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
342 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
343 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
344
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
345 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
346
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
347 /* 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
348 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
349 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
350
"Welcome to our mercurial repository"