Lines Matching refs:sd

112 	ps_sd *sd;  in ps_sd_new()  local
117 sd = mm_malloc(data->mm, sizeof(ps_sd) + keylen); in ps_sd_new()
118 if (!sd) { in ps_sd_new()
127 sd->ctime = 0; in ps_sd_new()
128 sd->hv = hv; in ps_sd_new()
129 sd->data = NULL; in ps_sd_new()
130 sd->alloclen = sd->datalen = 0; in ps_sd_new()
132 memcpy(sd->key, key, keylen + 1); in ps_sd_new()
134 sd->next = data->hash[slot]; in ps_sd_new()
135 data->hash[slot] = sd; in ps_sd_new()
139 if (!sd->next) { in ps_sd_new()
145 ps_mm_debug(("inserting %s(%p) into slot %d\n", key, sd, slot)); in ps_sd_new()
147 return sd; in ps_sd_new()
150 static void ps_sd_destroy(ps_mm *data, ps_sd *sd) in ps_sd_destroy() argument
154 slot = ps_sd_hash(sd->key, strlen(sd->key)) & data->hash_max; in ps_sd_destroy()
156 if (data->hash[slot] == sd) { in ps_sd_destroy()
157 data->hash[slot] = sd->next; in ps_sd_destroy()
162 for (prev = data->hash[slot]; prev->next != sd; prev = prev->next); in ps_sd_destroy()
163 prev->next = sd->next; in ps_sd_destroy()
168 if (sd->data) { in ps_sd_destroy()
169 mm_free(data->mm, sd->data); in ps_sd_destroy()
172 mm_free(data->mm, sd); in ps_sd_destroy()
206 ps_sd *sd; in ps_mm_key_exists() local
211 sd = ps_sd_lookup(data, key, 0); in ps_mm_key_exists()
212 if (sd) { in ps_mm_key_exists()
246 ps_sd *sd, *next; in ps_mm_destroy() local
256 for (sd = data->hash[h]; sd; sd = next) { in ps_mm_destroy()
257 next = sd->next; in ps_mm_destroy()
258 ps_sd_destroy(data, sd); in ps_mm_destroy()
346 ps_sd *sd; in PS_READ_FUNC() local
370 sd = ps_sd_lookup(data, PS(id)->val, 0); in PS_READ_FUNC()
371 if (sd) { in PS_READ_FUNC()
372 *val = zend_string_init(sd->data, sd->datalen, 0); in PS_READ_FUNC()
384 ps_sd *sd; in PS_WRITE_FUNC() local
388 sd = ps_sd_lookup(data, key->val, 1); in PS_WRITE_FUNC()
389 if (!sd) { in PS_WRITE_FUNC()
390 sd = ps_sd_new(data, key->val); in PS_WRITE_FUNC()
394 if (sd) { in PS_WRITE_FUNC()
395 if (val->len >= sd->alloclen) { in PS_WRITE_FUNC()
397 mm_free(data->mm, sd->data); in PS_WRITE_FUNC()
399 sd->alloclen = val->len + 1; in PS_WRITE_FUNC()
400 sd->data = mm_malloc(data->mm, sd->alloclen); in PS_WRITE_FUNC()
402 if (!sd->data) { in PS_WRITE_FUNC()
403 ps_sd_destroy(data, sd); in PS_WRITE_FUNC()
405 sd = NULL; in PS_WRITE_FUNC()
408 if (sd) { in PS_WRITE_FUNC()
409 sd->datalen = val->len; in PS_WRITE_FUNC()
410 memcpy(sd->data, val->val, val->len); in PS_WRITE_FUNC()
411 time(&sd->ctime); in PS_WRITE_FUNC()
417 return sd ? SUCCESS : FAILURE; in PS_WRITE_FUNC()
423 ps_sd *sd; in PS_DESTROY_FUNC() local
427 sd = ps_sd_lookup(data, key->val, 0); in PS_DESTROY_FUNC()
428 if (sd) { in PS_DESTROY_FUNC()
429 ps_sd_destroy(data, sd); in PS_DESTROY_FUNC()
442 ps_sd *sd, *next; in PS_GC_FUNC() local
455 for (sd = *ohash; sd; sd = next) { in PS_GC_FUNC()
456 next = sd->next; in PS_GC_FUNC()
457 if (sd->ctime < limit) { in PS_GC_FUNC()
458 ps_mm_debug(("purging %s\n", sd->key)); in PS_GC_FUNC()
459 ps_sd_destroy(data, sd); in PS_GC_FUNC()