Changes in uspace/app/trace/ipcp.c [4e00f87:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/trace/ipcp.c
r4e00f87 r9d58539 38 38 #include <sys/typefmt.h> 39 39 #include <abi/ipc/methods.h> 40 #include <macros.h>41 40 #include "ipc_desc.h" 42 41 #include "proto.h" … … 53 52 ipc_callid_t call_hash; 54 53 55 ht_link_t link;54 link_t link; 56 55 } pending_call_t; 57 56 … … 65 64 int have_conn[MAX_PHONE]; 66 65 67 static hash_table_t pending_calls; 66 #define PCALL_TABLE_CHAINS 32 67 hash_table_t pending_calls; 68 68 69 69 /* … … 73 73 proto_t *proto_unknown; /**< Protocol with no known methods. */ 74 74 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 = { 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 = { 97 81 .hash = pending_call_hash, 98 .key_hash = pending_call_key_hash, 99 .key_equal = pending_call_key_equal, 100 .equal = NULL, 101 .remove_callback = NULL 82 .compare = pending_call_compare, 83 .remove_callback = pending_call_remove_callback 102 84 }; 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 } 103 109 104 110 … … 171 177 } 172 178 173 bool ok = hash_table_create(&pending_calls, 0, 0, &pending_call_ops); 174 assert(ok); 179 hash_table_create(&pending_calls, PCALL_TABLE_CHAINS, 1, &pending_call_ops); 175 180 } 176 181 … … 185 190 pending_call_t *pcall; 186 191 proto_t *proto; 192 unsigned long key[1]; 187 193 oper_t *oper; 188 194 sysarg_t *args; … … 248 254 pcall->oper = oper; 249 255 250 hash_table_insert(&pending_calls, &pcall->link); 256 key[0] = hash; 257 258 hash_table_insert(&pending_calls, key, &pcall->link); 251 259 } 252 260 … … 326 334 void ipcp_call_in(ipc_call_t *call, ipc_callid_t hash) 327 335 { 328 ht_link_t *item;336 link_t *item; 329 337 pending_call_t *pcall; 338 unsigned long key[1]; 330 339 331 340 if ((hash & IPC_CALLID_ANSWERED) == 0 && hash != IPCP_CALLID_SYNC) { … … 338 347 339 348 hash = hash & ~IPC_CALLID_ANSWERED; 340 341 item = hash_table_find(&pending_calls, &hash); 349 key[0] = hash; 350 351 item = hash_table_find(&pending_calls, key); 342 352 if (item == NULL) 343 353 return; /* No matching question found */ … … 347 357 */ 348 358 349 pcall = hash_table_get_inst (item, pending_call_t, link);350 hash_table_remove(&pending_calls, &hash);359 pcall = hash_table_get_instance(item, pending_call_t, link); 360 hash_table_remove(&pending_calls, key, 1); 351 361 352 362 parse_answer(hash, pcall, call);
Note:
See TracChangeset
for help on using the changeset viewer.