Lines Matching refs:data

201 	prf_data_t	data;
251 for (data = g_shared_trees; data; data = data->next) {
252 if (!strcmp(data->filespec, expanded_filename)
254 && r_access(data->filespec))
257 if (data) {
258 data->refcount++;
260 retval = profile_update_file_data(data);
262 prf->data = data;
268 data = profile_make_prf_data(expanded_filename);
269 if (data == NULL) {
275 prf->data = data;
277 retval = k5_mutex_init(&data->lock);
279 free(data);
297 data->flags |= PROFILE_FILE_SHARED;
298 data->next = g_shared_trees;
299 g_shared_trees = data;
307 errcode_t profile_update_file_data(prf_data_t data)
317 retval = k5_mutex_lock(&data->lock);
323 if (now == data->last_stat && data->root != NULL) {
324 k5_mutex_unlock(&data->lock);
327 if (stat(data->filespec, &st)) {
329 k5_mutex_unlock(&data->lock);
332 data->last_stat = now;
342 if (st.st_mtime == data->timestamp
343 && frac == data->frac_ts
344 && data->root != NULL) {
345 k5_mutex_unlock(&data->lock);
348 if (data->root) {
349 profile_free_node(data->root);
350 data->root = 0;
352 if (data->comment) {
353 free(data->comment);
354 data->comment = 0;
362 if (data->root) {
363 k5_mutex_unlock(&data->lock);
369 f = fopen(data->filespec, "rF");
372 k5_mutex_unlock(&data->lock);
377 data->upd_serial++;
378 data->flags &= PROFILE_FILE_SHARED;
379 if (rw_access(data->filespec))
380 data->flags |= PROFILE_FILE_RW;
381 retval = profile_parse_file(f, &data->root);
384 k5_mutex_unlock(&data->lock);
387 assert(data->root != NULL);
389 data->timestamp = st.st_mtime;
390 data->frac_ts = frac;
392 k5_mutex_unlock(&data->lock);
406 static errcode_t write_data_to_file(prf_data_t data, const char *outfile,
438 profile_write_tree_file(data->root, f);
463 small window where data->filespec does not refer to
479 data->flags = 0;
481 data->flags |= PROFILE_FILE_RW;
492 errcode_t profile_flush_file_data_to_buffer (prf_data_t data, char **bufp)
495 retval = k5_mutex_lock(&data->lock);
498 retval = profile_write_tree_to_buffer(data->root, bufp);
499 k5_mutex_unlock(&data->lock);
503 errcode_t profile_flush_file_data(prf_data_t data)
507 if (!data || data->magic != PROF_MAGIC_FILE_DATA)
510 retval = k5_mutex_lock(&data->lock);
514 if ((data->flags & PROFILE_FILE_DIRTY) == 0) {
515 k5_mutex_unlock(&data->lock);
519 retval = write_data_to_file(data, data->filespec, 0);
520 k5_mutex_unlock(&data->lock);
524 errcode_t profile_flush_file_data_to_file(prf_data_t data, const char *outfile)
528 if (!data || data->magic != PROF_MAGIC_FILE_DATA)
531 retval = k5_mutex_lock(&data->lock);
534 retval = write_data_to_file(data, outfile, 1);
535 k5_mutex_unlock(&data->lock);
541 void profile_dereference_data(prf_data_t data)
547 profile_dereference_data_locked(data);
550 void profile_dereference_data_locked(prf_data_t data)
553 data->refcount--;
554 if (data->refcount == 0)
555 profile_free_file_data(data);
570 profile_dereference_data(prf->data);
575 static void profile_free_file_data(prf_data_t data)
578 if (data->flags & PROFILE_FILE_SHARED) {
580 if (g_shared_trees == data)
581 g_shared_trees = data->next;
587 if (next == data) {
596 if (data->root)
597 profile_free_node(data->root);
598 if (data->comment)
599 free(data->comment);
600 data->magic = 0;
601 k5_mutex_destroy(&data->lock);
602 free(data);