Changes in uspace/app/trace/ipcp.c [c0699467:a3b339b4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/trace/ipcp.c
rc0699467 ra3b339b4 38 38 #include <sys/typefmt.h> 39 39 #include <abi/ipc/methods.h> 40 #include <macros.h> 40 41 #include "ipc_desc.h" 41 42 #include "proto.h" … … 52 53 ipc_callid_t call_hash; 53 54 54 link_t link;55 ht_link_t link; 55 56 } pending_call_t; 56 57 … … 64 65 int have_conn[MAX_PHONE]; 65 66 66 #define PCALL_TABLE_CHAINS 32 67 hash_table_t pending_calls; 67 static hash_table_t pending_calls; 68 68 69 69 /* … … 73 73 proto_t *proto_unknown; /**< Protocol with no known methods. */ 74 74 75 static hash_index_t pending_call_hash(unsigned long key[]); 76 static int pending_call_compare(unsigned long key[], hash_count_t keys, 77 link_t *item); 78 static void pending_call_remove_callback(link_t *item); 79 80 hash_table_operations_t pending_call_ops = { 75 76 static size_t pending_call_key_hash(void *key) 77 { 78 ipc_callid_t *call_id = (ipc_callid_t *)key; 79 return *call_id; 80 } 81 82 static size_t pending_call_hash(const ht_link_t *item) 83 { 84 pending_call_t *hs = hash_table_get_inst(item, pending_call_t, link); 85 return hs->call_hash; 86 } 87 88 static bool pending_call_key_equal(void *key, const ht_link_t *item) 89 { 90 ipc_callid_t *call_id = (ipc_callid_t *)key; 91 pending_call_t *hs = hash_table_get_inst(item, pending_call_t, link); 92 93 return *call_id == hs->call_hash; 94 } 95 96 static hash_table_ops_t pending_call_ops = { 81 97 .hash = pending_call_hash, 82 .compare = pending_call_compare, 83 .remove_callback = pending_call_remove_callback 98 .key_hash = pending_call_key_hash, 99 .key_equal = pending_call_key_equal, 100 .equal = NULL, 101 .remove_callback = NULL 84 102 }; 85 86 87 static hash_index_t pending_call_hash(unsigned long key[])88 {89 // printf("pending_call_hash\n");90 return key[0] % PCALL_TABLE_CHAINS;91 }92 93 static int pending_call_compare(unsigned long key[], hash_count_t keys,94 link_t *item)95 {96 pending_call_t *hs;97 98 // printf("pending_call_compare\n");99 hs = hash_table_get_instance(item, pending_call_t, link);100 101 // FIXME: this will fail if sizeof(long) < sizeof(void *).102 return key[0] == hs->call_hash;103 }104 105 static void pending_call_remove_callback(link_t *item)106 {107 // printf("pending_call_remove_callback\n");108 }109 103 110 104 … … 146 140 void ipcp_init(void) 147 141 { 148 ipc_m_desc_t *desc;149 oper_t *oper;150 151 142 val_type_t arg_def[OPER_MAX_ARGS] = { 152 143 V_INTEGER, … … 168 159 proto_system = proto_new("system"); 169 160 170 desc = ipc_methods; 171 while (desc->number != 0) { 172 oper = oper_new(desc->name, OPER_MAX_ARGS, arg_def, V_INTEGER, 173 OPER_MAX_ARGS, arg_def); 174 proto_add_oper(proto_system, desc->number, oper); 175 176 ++desc; 177 } 178 179 hash_table_create(&pending_calls, PCALL_TABLE_CHAINS, 1, &pending_call_ops); 161 for (size_t i = 0; i < ipc_methods_len; i++) { 162 oper_t *oper = oper_new(ipc_methods[i].name, OPER_MAX_ARGS, 163 arg_def, V_INTEGER, OPER_MAX_ARGS, arg_def); 164 proto_add_oper(proto_system, ipc_methods[i].number, oper); 165 } 166 167 bool ok = hash_table_create(&pending_calls, 0, 0, &pending_call_ops); 168 assert(ok); 180 169 } 181 170 … … 190 179 pending_call_t *pcall; 191 180 proto_t *proto; 192 unsigned long key[1];193 181 oper_t *oper; 194 182 sysarg_t *args; … … 254 242 pcall->oper = oper; 255 243 256 key[0] = hash; 257 258 hash_table_insert(&pending_calls, key, &pcall->link); 244 hash_table_insert(&pending_calls, &pcall->link); 259 245 } 260 246 … … 334 320 void ipcp_call_in(ipc_call_t *call, ipc_callid_t hash) 335 321 { 336 link_t *item;322 ht_link_t *item; 337 323 pending_call_t *pcall; 338 unsigned long key[1];339 324 340 325 if ((hash & IPC_CALLID_ANSWERED) == 0 && hash != IPCP_CALLID_SYNC) { … … 347 332 348 333 hash = hash & ~IPC_CALLID_ANSWERED; 349 key[0] = hash; 350 351 item = hash_table_find(&pending_calls, key); 334 335 item = hash_table_find(&pending_calls, &hash); 352 336 if (item == NULL) 353 337 return; /* No matching question found */ … … 357 341 */ 358 342 359 pcall = hash_table_get_inst ance(item, pending_call_t, link);360 hash_table_remove(&pending_calls, key, 1);343 pcall = hash_table_get_inst(item, pending_call_t, link); 344 hash_table_remove(&pending_calls, &hash); 361 345 362 346 parse_answer(hash, pcall, call);
Note:
See TracChangeset
for help on using the changeset viewer.