Mercurial > hg > freeDiameter
annotate libfdcore/hooks.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 | 566bb46cc73f |
children |
rev | line source |
---|---|
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
1 /********************************************************************************************************* |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
2 * Software License Agreement (BSD License) * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
4 * * |
1554
566bb46cc73f
Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1405
diff
changeset
|
5 * Copyright (c) 2020, WIDE Project and NICT * |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
6 * All rights reserved. * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
7 * * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
8 * Redistribution and use of this software in source and binary forms, with or without modification, are * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
9 * permitted provided that the following conditions are met: * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
10 * * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
11 * * Redistributions of source code must retain the above * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
12 * copyright notice, this list of conditions and the * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
13 * following disclaimer. * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
14 * * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
15 * * Redistributions in binary form must reproduce the above * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
16 * copyright notice, this list of conditions and the * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
17 * following disclaimer in the documentation and/or other * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
18 * materials provided with the distribution. * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
19 * * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
20 * * Neither the name of the WIDE Project or NICT nor the * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
21 * names of its contributors may be used to endorse or * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
22 * promote products derived from this software without * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
23 * specific prior written permission of WIDE Project and * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
24 * NICT. * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
25 * * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
34 *********************************************************************************************************/ |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
35 |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
36 #include "fdcore-internal.h" |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
37 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
38 /* Structures for the fd_hook_data_hdl management */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
39 static struct fd_hook_data_hdl { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
40 size_t pmd_size; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
41 void (*pmd_init_cb)(struct fd_hook_permsgdata *); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
42 void (*pmd_fini_cb)(struct fd_hook_permsgdata *); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
43 } HDH_array[FD_HOOK_HANDLE_LIMIT]; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
44 static int max_index = 0; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
45 static pthread_mutex_t HDH_lock = PTHREAD_MUTEX_INITIALIZER; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
46 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
47 /* The structure linked from the msg structure list */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
48 struct pmd_list_item { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
49 struct fd_list chain; /* this list is ordered by hdl */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
50 struct fd_hook_data_hdl * hdl; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
51 struct fd_hook_permsgdata { } pmd; /* this data belongs to the extension; we only know the size of it */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
52 }; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
53 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
54 #define sizeof_pmd(hdl) (((size_t)&((struct pmd_list_item *)0)->pmd) + hdl->pmd_size) |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
55 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
56 /* Now a hook registered by an extension */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
57 struct fd_hook_hdl { |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
58 struct fd_list chain[HOOK_LAST+1]; |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
59 void (*fd_hook_cb)(enum fd_hook_type type, struct msg * msg, struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd, void * regdata); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
60 void *regdata; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
61 struct fd_hook_data_hdl *data_hdl; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
62 }; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
63 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
64 /* Array of those hooks */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
65 struct { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
66 struct fd_list sentinel; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
67 pthread_rwlock_t rwlock; |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
68 } HS_array[HOOK_LAST+1]; |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
69 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
70 /* Initialize the array of sentinels for the hooks */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
71 int fd_hooks_init(void) |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
72 { |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
73 int i; |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
74 for (i=0; i <= HOOK_LAST; i++) { |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
75 fd_list_init(&HS_array[i].sentinel, NULL); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
76 CHECK_POSIX( pthread_rwlock_init(&HS_array[i].rwlock, NULL) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
77 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
78 return 0; |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
79 } |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
80 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
81 /* Get a slot in the array */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
82 int fd_hook_data_register( |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
83 size_t permsgdata_size, |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
84 void (*permsgdata_init_cb) (struct fd_hook_permsgdata *), |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
85 void (*permsgdata_fini_cb) (struct fd_hook_permsgdata *), |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
86 struct fd_hook_data_hdl **new_handle) |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
87 { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
88 int ret = ENOSPC, idx; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
89 TRACE_ENTRY("%zd %p %p %p", permsgdata_size, permsgdata_init_cb, permsgdata_fini_cb, new_handle); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
90 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
91 CHECK_PARAMS( permsgdata_size && new_handle ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
92 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
93 CHECK_POSIX( pthread_mutex_lock(&HDH_lock) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
94 if (max_index < FD_HOOK_HANDLE_LIMIT) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
95 idx = max_index++; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
96 ret = 0; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
97 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
98 CHECK_POSIX( pthread_mutex_unlock(&HDH_lock) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
99 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
100 if (ret == 0) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
101 HDH_array[idx].pmd_size = permsgdata_size; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
102 HDH_array[idx].pmd_init_cb = permsgdata_init_cb; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
103 HDH_array[idx].pmd_fini_cb = permsgdata_fini_cb; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
104 *new_handle = &HDH_array[idx]; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
105 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
106 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
107 return ret; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
108 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
109 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
110 /* Register a new hook callback */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
111 int fd_hook_register ( uint32_t type_mask, |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
112 void (*fd_hook_cb)(enum fd_hook_type type, struct msg * msg, struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd, void * regdata), |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
113 void *regdata, |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
114 struct fd_hook_data_hdl *data_hdl, |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
115 struct fd_hook_hdl ** handler ) |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
116 { |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
117 struct fd_hook_hdl * newhdl = NULL; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
118 int i; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
119 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
120 TRACE_ENTRY("%x %p %p %p %p", type_mask, fd_hook_cb, regdata, data_hdl, handler); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
121 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
122 CHECK_PARAMS( fd_hook_cb && handler ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
123 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
124 CHECK_MALLOC( newhdl = malloc(sizeof(struct fd_hook_hdl)) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
125 memset(newhdl, 0, sizeof(struct fd_hook_hdl)); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
126 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
127 newhdl->fd_hook_cb = fd_hook_cb; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
128 newhdl->regdata = regdata; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
129 newhdl->data_hdl = data_hdl; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
130 |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
131 for (i=0; i <= HOOK_LAST; i++) { |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
132 fd_list_init(&newhdl->chain[i], newhdl); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
133 if (type_mask & (1<<i)) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
134 CHECK_POSIX( pthread_rwlock_wrlock(&HS_array[i].rwlock) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
135 fd_list_insert_before( &HS_array[i].sentinel, &newhdl->chain[i]); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
136 CHECK_POSIX( pthread_rwlock_unlock(&HS_array[i].rwlock) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
137 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
138 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
139 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
140 *handler = newhdl; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
141 return 0; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
142 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
143 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
144 /* free this hook callback */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
145 int fd_hook_unregister( struct fd_hook_hdl * handler ) |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
146 { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
147 int i; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
148 TRACE_ENTRY("%p", handler); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
149 CHECK_PARAMS( handler ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
150 |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
151 for (i=0; i <= HOOK_LAST; i++) { |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
152 if ( ! FD_IS_LIST_EMPTY(&handler->chain[i])) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
153 CHECK_POSIX( pthread_rwlock_wrlock(&HS_array[i].rwlock) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
154 fd_list_unlink(&handler->chain[i]); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
155 CHECK_POSIX( pthread_rwlock_unlock(&HS_array[i].rwlock) ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
156 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
157 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
158 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
159 free(handler); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
160 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
161 return 0; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
162 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
163 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
164 /* callback for the libfdproto to free the data associated with a message */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
165 static void pmdl_free(struct fd_msg_pmdl *pmdl) |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
166 { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
167 /* destroy all the items in the list */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
168 while (!FD_IS_LIST_EMPTY(&pmdl->sentinel)) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
169 struct pmd_list_item * li = (struct pmd_list_item *)(pmdl->sentinel.next); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
170 if (li->hdl->pmd_fini_cb) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
171 (*li->hdl->pmd_fini_cb)(&li->pmd); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
172 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
173 fd_list_unlink(&li->chain); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
174 free(li); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
175 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
176 CHECK_POSIX_DO( pthread_mutex_destroy(&pmdl->lock), ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
177 pmdl->sentinel.o = NULL; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
178 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
179 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
180 /* Save the list of pmd into the message structure, as well as the callback to free this list */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
181 void fd_hook_associate(struct msg * msg, struct fd_msg_pmdl * pmdl) |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
182 { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
183 struct fd_msg_pmdl * in_msg; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
184 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
185 CHECK_PARAMS_DO( msg && pmdl, return ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
186 in_msg = fd_msg_pmdl_get(msg); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
187 ASSERT(in_msg && (in_msg->sentinel.o == NULL)); /* error / already initialized ??? */ |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
188 in_msg->sentinel.o = pmdl_free; |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
189 /* Now move all items from the pmdl pointer into the initialized list */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
190 CHECK_POSIX_DO( pthread_mutex_lock(&pmdl->lock), ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
191 fd_list_move_end(&in_msg->sentinel, &pmdl->sentinel); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
192 CHECK_POSIX_DO( pthread_mutex_unlock(&pmdl->lock), ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
193 pmdl_free(pmdl); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
194 /* We're done */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
195 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
196 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
197 /* Return the location of the permsgdata area corresponding to this handle, after eventually having created it. Return NULL in case of failure */ |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
198 static struct fd_hook_permsgdata * get_or_create_pmd(struct fd_msg_pmdl *pmdl, struct fd_hook_data_hdl * h) |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
199 { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
200 struct fd_hook_permsgdata * ret = NULL; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
201 struct fd_list * li; |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
202 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
203 CHECK_POSIX_DO( pthread_mutex_lock(&pmdl->lock), ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
204 |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
205 if (pmdl->sentinel.o == NULL) { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
206 pmdl->sentinel.o = pmdl_free; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
207 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
208 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
209 /* Search in the list for an item with the same handle. The list is ordered by this handle */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
210 for (li=pmdl->sentinel.next; li != &pmdl->sentinel; li = li->next) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
211 struct pmd_list_item * pli = (struct pmd_list_item *) li; |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
212 if (pli->hdl == h) |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
213 ret = &pli->pmd; |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
214 if (pli->hdl >= h) |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
215 break; |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
216 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
217 if (!ret) { |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
218 /* we need to create a new one and insert before li */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
219 struct pmd_list_item * pli; |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
220 CHECK_MALLOC_DO( pli = malloc(sizeof_pmd(h)), ); |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
221 if (pli) { |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
222 memset(pli, 0, sizeof_pmd(h)); |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
223 fd_list_init(&pli->chain, pli); |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
224 pli->hdl = h; |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
225 ret = &pli->pmd; |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
226 if (h->pmd_init_cb) { |
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
227 (*h->pmd_init_cb)(ret); |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
228 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
229 fd_list_insert_before(li, &pli->chain); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
230 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
231 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
232 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
233 CHECK_POSIX_DO( pthread_mutex_unlock(&pmdl->lock), ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
234 return ret; |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
235 } |
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
236 |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
237 struct fd_hook_permsgdata * fd_hook_get_pmd(struct fd_hook_data_hdl *data_hdl, struct msg * msg) |
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
238 { |
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
239 return get_or_create_pmd(fd_msg_pmdl_get(msg), data_hdl); |
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
240 } |
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
241 |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
242 struct fd_hook_permsgdata * fd_hook_get_request_pmd(struct fd_hook_data_hdl *data_hdl, struct msg * answer) |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
243 { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
244 struct msg * qry; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
245 struct fd_msg_pmdl *pmdl; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
246 struct fd_hook_permsgdata * ret = NULL; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
247 struct fd_list * li; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
248 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
249 CHECK_FCT_DO( fd_msg_answ_getq(answer, &qry), return NULL ); |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
250 if (!qry) |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
251 return NULL; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
252 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
253 pmdl = fd_msg_pmdl_get(qry); |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
254 if (!pmdl) |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
255 return NULL; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
256 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
257 CHECK_POSIX_DO( pthread_mutex_lock(&pmdl->lock), ); |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
258 /* Search in the list for an item with the same handle. The list is ordered by this handle */ |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
259 for (li=pmdl->sentinel.next; li != &pmdl->sentinel; li = li->next) { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
260 struct pmd_list_item * pli = (struct pmd_list_item *) li; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
261 if (pli->hdl == data_hdl) |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
262 ret = &pli->pmd; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
263 if (pli->hdl >= data_hdl) |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
264 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
265 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
266 CHECK_POSIX_DO( pthread_mutex_unlock(&pmdl->lock), ); |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
267 return ret; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
268 } |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
269 |
1128
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
270 /* Create a mask */ |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
271 uint32_t fd_hook_mask_helper(int dummy, ...) |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
272 { |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
273 va_list ap; |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
274 uint32_t ret = 0; |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
275 int next; |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
276 |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
277 va_start(ap, dummy); |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
278 while ((next = va_arg(ap, int)) >= 0) { |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
279 if (next > HOOK_LAST) |
1128
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
280 break; /* invalid parameter */ |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
281 ret |= (1<<next); |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
282 } |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
283 va_end(ap); |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
284 |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
285 return ret; |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
286 } |
7c5449ddc434
New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1120
diff
changeset
|
287 |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
288 static pthread_mutex_t hook_default_mtx = PTHREAD_MUTEX_INITIALIZER; |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
289 static char * hook_default_buf = NULL; |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
290 static size_t hook_default_len = 0; |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
291 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
292 /* The function that does the work of calling the extension's callbacks and also managing the permessagedata structures */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
293 void fd_hook_call(enum fd_hook_type type, struct msg * msg, struct fd_peer * peer, void * other, struct fd_msg_pmdl * pmdl) |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
294 { |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
295 struct fd_list * li; |
1194
90d1222a65a8
Rename HOOK_PEER_LAST to HOOK_LAST
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1186
diff
changeset
|
296 ASSERT(type <= HOOK_LAST); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
297 int call_default = 0; |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
298 |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
299 /* lock the list of hooks for this type */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
300 CHECK_POSIX_DO( pthread_rwlock_rdlock(&HS_array[type].rwlock), ); |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
301 |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
302 pthread_cleanup_push( fd_cleanup_rwlock, &HS_array[type].rwlock ); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
303 |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
304 if (FD_IS_LIST_EMPTY(&HS_array[type].sentinel)) { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
305 call_default = 1; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
306 } else { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
307 /* for each registered hook */ |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
308 for (li = HS_array[type].sentinel.next; li != &HS_array[type].sentinel; li = li->next) { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
309 struct fd_hook_hdl * h = (struct fd_hook_hdl *)li->o; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
310 struct fd_hook_permsgdata * pmd = NULL; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
311 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
312 /* do we need to handle pmd ? */ |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
313 if (h->data_hdl && pmdl) { |
1329
175f2eb883a0
Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents:
1307
diff
changeset
|
314 pmd = get_or_create_pmd(pmdl, h->data_hdl); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
315 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
316 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
317 /* Now, call this callback */ |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
318 (*h->fd_hook_cb)(type, msg, &peer->p_hdr, other, pmd, h->regdata); |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
319 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
320 } |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
321 |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
322 pthread_cleanup_pop(0); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
323 |
1098
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
324 /* done */ |
f38d77f9cfd3
Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1077
diff
changeset
|
325 CHECK_POSIX_DO( pthread_rwlock_unlock(&HS_array[type].rwlock), ); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
326 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
327 if (call_default) { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
328 CHECK_POSIX_DO( pthread_mutex_lock(&hook_default_mtx), ); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
329 |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
330 pthread_cleanup_push( fd_cleanup_mutex, &hook_default_mtx ); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
331 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
332 /* There was no registered handler, default behavior for this hook */ |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
333 switch (type) { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
334 case HOOK_DATA_RECEIVED: { |
1405 | 335 #ifdef DEBUG |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
336 struct fd_cnx_rcvdata *rcv_data = other; |
1405 | 337 #endif |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
338 LOG_A("RCV: %zd bytes", rcv_data->length); |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
339 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
340 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
341 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
342 case HOOK_MESSAGE_RECEIVED: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
343 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
344 LOG_D("RCV from '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
345 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
346 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
347 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
348 case HOOK_MESSAGE_LOCAL: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
349 CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
350 LOG_A("Handled to framework for sending: %s", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
351 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
352 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
353 |
1299
035f489b845b
Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1245
diff
changeset
|
354 case HOOK_MESSAGE_SENDING: { |
035f489b845b
Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1245
diff
changeset
|
355 LOG_A("SENDING message to '%s'", peer ? peer->p_hdr.info.pi_diamid : "<unknown>"); |
035f489b845b
Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1245
diff
changeset
|
356 break; |
035f489b845b
Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1245
diff
changeset
|
357 } |
035f489b845b
Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1245
diff
changeset
|
358 |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
359 case HOOK_MESSAGE_SENT: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
360 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
361 LOG_D("SENT to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
362 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
363 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
364 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
365 case HOOK_MESSAGE_FAILOVER: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
366 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
367 LOG_D("Failing over message sent to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
368 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
369 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
370 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
371 case HOOK_MESSAGE_PARSING_ERROR: { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
372 if (msg) { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
373 DiamId_t id = NULL; |
1306
0d15dad33f0b
Fix logic error when calling fd_msg_source_get().
Thomas Klausner <tk@giga.or.at>
parents:
1245
diff
changeset
|
374 if (fd_msg_source_get( msg, &id, NULL )) |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
375 id = (DiamId_t)"<error getting source>"; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
376 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
377 if (!id) |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
378 id = (DiamId_t)"<local>"; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
379 |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
380 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
381 |
1163
6df90573cf57
Remove \n from LOG_E line.
Thomas Klausner <tk@giga.or.at>
parents:
1128
diff
changeset
|
382 LOG_E("Parsing error: '%s' for the following message received from '%s':", (char *)other, (char *)id); |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
383 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
384 } else { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
385 struct fd_cnx_rcvdata *rcv_data = other; |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
386 CHECK_MALLOC_DO(fd_dump_extend_hexdump(&hook_default_buf, &hook_default_len, NULL, rcv_data->buffer, rcv_data->length, 0, 0), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
387 LOG_E("Parsing error: cannot parse %zdB buffer from '%s': %s", rcv_data->length, peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
388 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
389 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
390 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
391 |
1301
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
392 case HOOK_MESSAGE_PARSING_ERROR2: { |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
393 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
394 |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
395 LOG_E("Returning following message after parsing error:"); |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
396 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
397 break; |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
398 } |
50fb308e84f7
Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1299
diff
changeset
|
399 |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
400 case HOOK_MESSAGE_ROUTING_ERROR: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
401 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
1163
6df90573cf57
Remove \n from LOG_E line.
Thomas Klausner <tk@giga.or.at>
parents:
1128
diff
changeset
|
402 LOG_E("Routing error: '%s' for the following message:", (char *)other); |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
403 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
404 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
405 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
406 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
407 case HOOK_MESSAGE_ROUTING_FORWARD: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
408 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
409 LOG_D("FORWARDING: %s", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
410 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
411 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
412 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
413 case HOOK_MESSAGE_ROUTING_LOCAL: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
414 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
415 LOG_D("DISPATCHING: %s", hook_default_buf); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
416 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
417 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
418 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
419 case HOOK_MESSAGE_DROPPED: { |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
420 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
1163
6df90573cf57
Remove \n from LOG_E line.
Thomas Klausner <tk@giga.or.at>
parents:
1128
diff
changeset
|
421 LOG_E("Message discarded ('%s'):", (char *)other); |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
422 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
423 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
424 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
425 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
426 case HOOK_PEER_CONNECT_FAILED: { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
427 if (msg) { |
1245
4b511d9b3def
Change default dump of peer connection, add more options to the dbg_msg_dumps extensions
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1215
diff
changeset
|
428 CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
1168
a4604f98adae
Split output of fd_msg_dump_treeview
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1163
diff
changeset
|
429 LOG_N("Connection to '%s' failed: '%s'; CER/CEA dump:", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", (char *)other); |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
430 LOG_SPLIT(FD_LOG_NOTICE, " ", hook_default_buf, NULL); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
431 } else { |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
432 LOG_D("Connection to '%s' failed: %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", (char *)other); |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
433 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
434 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
435 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
436 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
437 case HOOK_PEER_CONNECT_SUCCESS: { |
1120
c473581adff2
Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1103
diff
changeset
|
438 DiamId_t id = NULL; |
c473581adff2
Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1103
diff
changeset
|
439 if ((!fd_msg_source_get( msg, &id, NULL )) && (id == NULL)) { /* The CEA is locally issued */ |
c473581adff2
Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1103
diff
changeset
|
440 fd_msg_answ_getq(msg, &msg); /* We dump the CER in that case */ |
c473581adff2
Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1103
diff
changeset
|
441 } |
1245
4b511d9b3def
Change default dump of peer connection, add more options to the dbg_msg_dumps extensions
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1215
diff
changeset
|
442 CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); |
1186
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
443 char protobuf[40]; |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
444 if (peer) { |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
445 CHECK_FCT_DO(fd_peer_cnx_proto_info(&peer->p_hdr, protobuf, sizeof(protobuf)), break ); |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
446 } else { |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
447 protobuf[0] = '-'; |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
448 protobuf[1] = '\0'; |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
449 } |
56c36d1007b4
Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1168
diff
changeset
|
450 LOG_N("Connected to '%s' (%s), remote capabilities: ", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", protobuf); |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
451 LOG_SPLIT(FD_LOG_NOTICE, " ", hook_default_buf, NULL); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
452 break; |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
453 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
454 |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
455 } |
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
456 |
1215
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
457 pthread_cleanup_pop(0); |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
458 |
65c6460f60f2
Ensure the hooks lock is released when a thread is canceled. Optimize the default hook behavior to avoid too many mallocs/free
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1202
diff
changeset
|
459 CHECK_POSIX_DO( pthread_mutex_unlock(&hook_default_mtx), ); |
1103
d8591b1c56cd
Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1098
diff
changeset
|
460 } |
1077
b36c81e52e9a
Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
461 } |