Lines Matching defs:rec

62 static void penalty_rec_free(struct penalty *penalty, struct penalty_rec *rec)
64 DLLIST2_REMOVE(&penalty->oldest, &penalty->newest, rec);
65 if (rec->checksum_is_pointer)
66 i_free(rec->checksum.value_ptr);
67 i_free(rec->ident);
68 i_free(rec);
91 penalty_bump_checksum(struct penalty_rec *rec, unsigned int checksum)
96 if (!rec->checksum_is_pointer) {
97 checksums = rec->checksum.value;
100 checksums = rec->checksum.value_ptr;
117 static void penalty_add_checksum(struct penalty_rec *rec, unsigned int checksum)
123 if (!rec->checksum_is_pointer) {
124 if (rec->checksum.value[CHECKSUM_VALUE_COUNT-1] == 0) {
125 memcpy(rec->checksum.value + 1, rec->checksum.value,
126 sizeof(rec->checksum.value[0]) *
128 rec->checksum.value[0] = checksum;
134 memcpy(checksums, rec->checksum.value,
136 rec->checksum.value_ptr = checksums;
137 rec->checksum_is_pointer = TRUE;
140 memmove(rec->checksum.value_ptr + 1, rec->checksum.value_ptr,
141 sizeof(rec->checksum.value_ptr[0]) *
143 rec->checksum.value_ptr[0] = checksum;
149 struct penalty_rec *rec;
151 rec = hash_table_lookup(penalty->hash, ident);
152 if (rec == NULL) {
157 *last_penalty_r = rec->last_penalty;
158 return rec->penalty;
163 struct penalty_rec *rec;
171 rec = penalty->oldest;
173 rec_last_update = rec->last_penalty + rec->last_update;
180 hash_table_remove(penalty->hash, rec->ident);
181 penalty_rec_free(penalty, rec);
188 struct penalty_rec *rec;
194 rec = hash_table_lookup(penalty->hash, ident);
195 if (rec == NULL) {
196 rec = i_new(struct penalty_rec, 1);
197 rec->ident = i_strdup(ident);
198 hash_table_insert(penalty->hash, rec->ident, rec);
200 DLLIST2_REMOVE(&penalty->oldest, &penalty->newest, rec);
204 rec->penalty = value;
205 rec->last_penalty = ioloop_time;
207 if (penalty_bump_checksum(rec, checksum))
208 rec->penalty = value - 1;
210 penalty_add_checksum(rec, checksum);
211 rec->penalty = value;
212 rec->last_penalty = ioloop_time;
216 diff = ioloop_time - rec->last_penalty;
218 rec->last_update = (1 << LAST_UPDATE_BITS) - 1;
219 rec->last_penalty = ioloop_time - rec->last_update;
221 rec->last_update = diff;
224 DLLIST2_APPEND(&penalty->oldest, &penalty->newest, rec);
235 struct penalty_rec *rec;
239 rec = hash_table_lookup(penalty->hash, ident);
240 if (rec == NULL)
243 if (!rec->checksum_is_pointer) {
244 checksums = rec->checksum.value;
247 checksums = rec->checksum.value_ptr;
260 const struct penalty_rec *rec;
263 for (rec = penalty->oldest; rec != NULL; rec = rec->next) {
265 str_append_tabescaped(str, rec->ident);
267 rec->penalty, rec->last_penalty,
268 rec->last_penalty + rec->last_update);