Mercurial > pidgin.yaz
comparison src/protocols/oscar/snac.c @ 2270:d82efea341ef
[gaim-migrate @ 2280]
new libfaim. stupid bugs.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 12 Sep 2001 00:39:51 +0000 |
parents | 933346315b9b |
children | b32474e522fa |
comparison
equal
deleted
inserted
replaced
2269:7ff6170d84a0 | 2270:d82efea341ef |
---|---|
20 */ | 20 */ |
21 faim_internal void aim_initsnachash(aim_session_t *sess) | 21 faim_internal void aim_initsnachash(aim_session_t *sess) |
22 { | 22 { |
23 int i; | 23 int i; |
24 | 24 |
25 for (i = 0; i < FAIM_SNAC_HASH_SIZE; i++) { | 25 for (i = 0; i < FAIM_SNAC_HASH_SIZE; i++) |
26 sess->snac_hash[i] = NULL; | 26 sess->snac_hash[i] = NULL; |
27 faim_mutex_init(&sess->snac_hash_locks[i]); | |
28 } | |
29 | 27 |
30 return; | 28 return; |
31 } | 29 } |
32 | 30 |
33 faim_internal aim_snacid_t aim_cachesnac(aim_session_t *sess, const fu16_t family, const fu16_t type, const fu16_t flags, const void *data, const int datalen) | 31 faim_internal aim_snacid_t aim_cachesnac(aim_session_t *sess, const fu16_t family, const fu16_t type, const fu16_t flags, const void *data, const int datalen) |
66 memcpy(snac, newsnac, sizeof(aim_snac_t)); | 64 memcpy(snac, newsnac, sizeof(aim_snac_t)); |
67 snac->issuetime = time(NULL); | 65 snac->issuetime = time(NULL); |
68 | 66 |
69 index = snac->id % FAIM_SNAC_HASH_SIZE; | 67 index = snac->id % FAIM_SNAC_HASH_SIZE; |
70 | 68 |
71 faim_mutex_lock(&sess->snac_hash_locks[index]); | |
72 snac->next = (aim_snac_t *)sess->snac_hash[index]; | 69 snac->next = (aim_snac_t *)sess->snac_hash[index]; |
73 sess->snac_hash[index] = (void *)snac; | 70 sess->snac_hash[index] = (void *)snac; |
74 faim_mutex_unlock(&sess->snac_hash_locks[index]); | |
75 | 71 |
76 return snac->id; | 72 return snac->id; |
77 } | 73 } |
78 | 74 |
79 /* | 75 /* |
88 aim_snac_t *cur, **prev; | 84 aim_snac_t *cur, **prev; |
89 int index; | 85 int index; |
90 | 86 |
91 index = id % FAIM_SNAC_HASH_SIZE; | 87 index = id % FAIM_SNAC_HASH_SIZE; |
92 | 88 |
93 faim_mutex_lock(&sess->snac_hash_locks[index]); | |
94 for (prev = (aim_snac_t **)&sess->snac_hash[index]; (cur = *prev); ) { | 89 for (prev = (aim_snac_t **)&sess->snac_hash[index]; (cur = *prev); ) { |
95 if (cur->id == id) { | 90 if (cur->id == id) { |
96 *prev = cur->next; | 91 *prev = cur->next; |
97 return cur; | 92 return cur; |
98 } else | 93 } else |
99 prev = &cur->next; | 94 prev = &cur->next; |
100 } | 95 } |
101 faim_mutex_unlock(&sess->snac_hash_locks[index]); | |
102 | 96 |
103 return cur; | 97 return cur; |
104 } | 98 } |
105 | 99 |
106 /* | 100 /* |
116 | 110 |
117 for (i = 0; i < FAIM_SNAC_HASH_SIZE; i++) { | 111 for (i = 0; i < FAIM_SNAC_HASH_SIZE; i++) { |
118 aim_snac_t *cur, **prev; | 112 aim_snac_t *cur, **prev; |
119 time_t curtime; | 113 time_t curtime; |
120 | 114 |
121 faim_mutex_lock(&sess->snac_hash_locks[i]); | 115 if (!sess->snac_hash[i]) |
122 if (!sess->snac_hash[i]) { | |
123 faim_mutex_unlock(&sess->snac_hash_locks[i]); | |
124 continue; | 116 continue; |
125 } | |
126 | 117 |
127 curtime = time(NULL); /* done here in case we waited for the lock */ | 118 curtime = time(NULL); /* done here in case we waited for the lock */ |
128 | 119 |
129 for (prev = (aim_snac_t **)&sess->snac_hash[i]; (cur = *prev); ) { | 120 for (prev = (aim_snac_t **)&sess->snac_hash[i]; (cur = *prev); ) { |
130 if ((curtime - cur->issuetime) > maxage) { | 121 if ((curtime - cur->issuetime) > maxage) { |
136 free(cur); | 127 free(cur); |
137 | 128 |
138 } else | 129 } else |
139 prev = &cur->next; | 130 prev = &cur->next; |
140 } | 131 } |
141 faim_mutex_unlock(&sess->snac_hash_locks[i]); | |
142 } | 132 } |
143 | 133 |
144 return; | 134 return; |
145 } | 135 } |
146 | 136 |