• Home
  • Raw
  • Download

Lines Matching +full:dlclose +full:- +full:skip

26 /* iOS (currently) doesn't provide the FSEvents-API (nor CoreServices) */
44 #include "darwin-stub.h"
112 /* Lazy-loaded by uv__fsevents_global_init(). */
157 uv_mutex_lock(&(handle)->cf_mutex); \
158 /* Split-off all events and empty original queue */ \
159 uv__queue_move(&(handle)->cf_events, &events); \
161 err = (handle)->cf_error; \
162 (handle)->cf_error = 0; \
163 uv_mutex_unlock(&(handle)->cf_mutex); \
178 (handle)->cb((handle), NULL, 0, err); \
186 handle = cb->data; in uv__fsevents_cb()
189 handle->cb(handle, event->path[0] ? event->path : NULL, event->events, 0); in uv__fsevents_cb()
199 uv_mutex_lock(&handle->cf_mutex); in uv__fsevents_push_event()
203 uv__queue_add(&handle->cf_events, events); in uv__fsevents_push_event()
207 handle->cf_error = err; in uv__fsevents_push_event()
208 uv_mutex_unlock(&handle->cf_mutex); in uv__fsevents_push_event()
210 uv_async_send(handle->cf_cb); in uv__fsevents_push_event()
235 state = loop->cf_state; in uv__fsevents_event_cb()
240 uv_mutex_lock(&state->fsevent_mutex); in uv__fsevents_event_cb()
241 uv__queue_foreach(q, &state->fsevent_handles) { in uv__fsevents_event_cb()
256 if (handle->realpath_len == 0) in uv__fsevents_event_cb()
260 if (len < handle->realpath_len) in uv__fsevents_event_cb()
266 if (handle->realpath_len != len && in uv__fsevents_event_cb()
267 handle->realpath_len > 1 && in uv__fsevents_event_cb()
268 path[handle->realpath_len] != '/') in uv__fsevents_event_cb()
271 if (memcmp(path, handle->realpath, handle->realpath_len) != 0) in uv__fsevents_event_cb()
274 if (!(handle->realpath_len == 1 && handle->realpath[0] == '/')) { in uv__fsevents_event_cb()
276 path += handle->realpath_len; in uv__fsevents_event_cb()
277 len -= handle->realpath_len; in uv__fsevents_event_cb()
287 while (len < handle->realpath_len && path[-1] != '/') { in uv__fsevents_event_cb()
288 path--; in uv__fsevents_event_cb()
294 /* Skip forward slash */ in uv__fsevents_event_cb()
296 len--; in uv__fsevents_event_cb()
301 if ((handle->cf_flags & UV_FS_EVENT_RECURSIVE) == 0 && *path != '\0') { in uv__fsevents_event_cb()
312 memcpy(event->path, path, len + 1); in uv__fsevents_event_cb()
313 event->events = UV_RENAME; in uv__fsevents_event_cb()
318 event->events = UV_CHANGE; in uv__fsevents_event_cb()
321 uv__queue_insert_tail(&head, &event->member); in uv__fsevents_event_cb()
327 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_event_cb()
347 * 1. NoDefer - without this flag, events that are happening continuously in uv__fsevents_create_stream()
355 * 2. FileEvents - fire callback for file changes too (by default it is firing in uv__fsevents_create_stream()
375 pFSEventStreamScheduleWithRunLoop(ref, state->loop, *pkCFRunLoopDefaultMode); in uv__fsevents_create_stream()
382 state->fsevent_stream = ref; in uv__fsevents_create_stream()
389 if (state->fsevent_stream == NULL) in uv__fsevents_destroy_stream()
393 pFSEventStreamStop(state->fsevent_stream); in uv__fsevents_destroy_stream()
396 pFSEventStreamInvalidate(state->fsevent_stream); in uv__fsevents_destroy_stream()
397 pFSEventStreamRelease(state->fsevent_stream); in uv__fsevents_destroy_stream()
398 state->fsevent_stream = NULL; in uv__fsevents_destroy_stream()
423 uv_mutex_lock(&state->fsevent_mutex); in uv__fsevents_reschedule()
424 if (state->fsevent_need_reschedule == 0) { in uv__fsevents_reschedule()
425 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_reschedule()
428 state->fsevent_need_reschedule = 0; in uv__fsevents_reschedule()
429 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_reschedule()
438 uv_mutex_lock(&state->fsevent_mutex); in uv__fsevents_reschedule()
439 path_count = state->fsevent_handle_count; in uv__fsevents_reschedule()
443 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_reschedule()
447 q = &state->fsevent_handles; in uv__fsevents_reschedule()
450 assert(q != &state->fsevent_handles); in uv__fsevents_reschedule()
453 assert(curr->realpath != NULL); in uv__fsevents_reschedule()
455 pCFStringCreateWithFileSystemRepresentation(NULL, curr->realpath); in uv__fsevents_reschedule()
457 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_reschedule()
462 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_reschedule()
480 pCFRelease(paths[--i]); in uv__fsevents_reschedule()
483 /* CFArray takes ownership of both strings and original C-array */ in uv__fsevents_reschedule()
488 uv_mutex_lock(&state->fsevent_mutex); in uv__fsevents_reschedule()
489 uv__queue_foreach(q, &state->fsevent_handles) { in uv__fsevents_reschedule()
493 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_reschedule()
503 uv_sem_post(&state->fsevent_sem); in uv__fsevents_reschedule()
521 * per-event loop properties and have the dynamic linker keep track for us. in uv__fsevents_global_init()
569 dlclose(core_services_handle); in uv__fsevents_global_init()
574 dlclose(core_foundation_handle); in uv__fsevents_global_init()
590 if (loop->cf_state != NULL) in uv__fsevents_loop_init()
601 err = uv_mutex_init(&loop->cf_mutex); in uv__fsevents_loop_init()
605 err = uv_sem_init(&loop->cf_sem, 0); in uv__fsevents_loop_init()
609 uv__queue_init(&loop->cf_signals); in uv__fsevents_loop_init()
611 err = uv_sem_init(&state->fsevent_sem, 0); in uv__fsevents_loop_init()
615 err = uv_mutex_init(&state->fsevent_mutex); in uv__fsevents_loop_init()
619 uv__queue_init(&state->fsevent_handles); in uv__fsevents_loop_init()
620 state->fsevent_need_reschedule = 0; in uv__fsevents_loop_init()
621 state->fsevent_handle_count = 0; in uv__fsevents_loop_init()
626 state->signal_source = pCFRunLoopSourceCreate(NULL, 0, &ctx); in uv__fsevents_loop_init()
627 if (state->signal_source == NULL) { in uv__fsevents_loop_init()
638 loop->cf_state = state; in uv__fsevents_loop_init()
641 err = UV__ERR(pthread_create(&loop->cf_thread, &attr, uv__cf_loop_runner, loop)); in uv__fsevents_loop_init()
650 uv_sem_wait(&loop->cf_sem); in uv__fsevents_loop_init()
654 loop->cf_state = NULL; in uv__fsevents_loop_init()
657 uv_mutex_destroy(&state->fsevent_mutex); in uv__fsevents_loop_init()
660 uv_sem_destroy(&state->fsevent_sem); in uv__fsevents_loop_init()
663 uv_sem_destroy(&loop->cf_sem); in uv__fsevents_loop_init()
666 uv_mutex_destroy(&loop->cf_mutex); in uv__fsevents_loop_init()
680 if (loop->cf_state == NULL) in uv__fsevents_loop_delete()
686 uv_thread_join(&loop->cf_thread); in uv__fsevents_loop_delete()
687 uv_sem_destroy(&loop->cf_sem); in uv__fsevents_loop_delete()
688 uv_mutex_destroy(&loop->cf_mutex); in uv__fsevents_loop_delete()
691 while (!uv__queue_empty(&loop->cf_signals)) { in uv__fsevents_loop_delete()
692 q = uv__queue_head(&loop->cf_signals); in uv__fsevents_loop_delete()
699 state = loop->cf_state; in uv__fsevents_loop_delete()
700 uv_sem_destroy(&state->fsevent_sem); in uv__fsevents_loop_delete()
701 uv_mutex_destroy(&state->fsevent_mutex); in uv__fsevents_loop_delete()
702 pCFRelease(state->signal_source); in uv__fsevents_loop_delete()
704 loop->cf_state = NULL; in uv__fsevents_loop_delete()
714 state = loop->cf_state; in uv__cf_loop_runner()
715 state->loop = pCFRunLoopGetCurrent(); in uv__cf_loop_runner()
717 pCFRunLoopAddSource(state->loop, in uv__cf_loop_runner()
718 state->signal_source, in uv__cf_loop_runner()
721 uv_sem_post(&loop->cf_sem); in uv__cf_loop_runner()
724 pCFRunLoopRemoveSource(state->loop, in uv__cf_loop_runner()
725 state->signal_source, in uv__cf_loop_runner()
728 state->loop = NULL; in uv__cf_loop_runner()
743 state = loop->cf_state; in uv__cf_loop_cb()
745 uv_mutex_lock(&loop->cf_mutex); in uv__cf_loop_cb()
746 uv__queue_move(&loop->cf_signals, &split_head); in uv__cf_loop_cb()
747 uv_mutex_unlock(&loop->cf_mutex); in uv__cf_loop_cb()
756 if (s->handle == NULL) in uv__cf_loop_cb()
757 pCFRunLoopStop(state->loop); in uv__cf_loop_cb()
759 uv__fsevents_reschedule(state, loop, s->type); in uv__cf_loop_cb()
777 item->handle = handle; in uv__cf_loop_signal()
778 item->type = type; in uv__cf_loop_signal()
780 uv_mutex_lock(&loop->cf_mutex); in uv__cf_loop_signal()
781 uv__queue_insert_tail(&loop->cf_signals, &item->member); in uv__cf_loop_signal()
783 state = loop->cf_state; in uv__cf_loop_signal()
785 pCFRunLoopSourceSignal(state->signal_source); in uv__cf_loop_signal()
786 pCFRunLoopWakeUp(state->loop); in uv__cf_loop_signal()
788 uv_mutex_unlock(&loop->cf_mutex); in uv__cf_loop_signal()
799 err = uv__fsevents_loop_init(handle->loop); in uv__fsevents_init()
804 handle->realpath = realpath(handle->path, NULL); in uv__fsevents_init()
805 if (handle->realpath == NULL) in uv__fsevents_init()
807 handle->realpath_len = strlen(handle->realpath); in uv__fsevents_init()
810 uv__queue_init(&handle->cf_events); in uv__fsevents_init()
811 handle->cf_error = 0; in uv__fsevents_init()
817 handle->cf_cb = uv__malloc(sizeof(*handle->cf_cb)); in uv__fsevents_init()
818 if (handle->cf_cb == NULL) { in uv__fsevents_init()
823 handle->cf_cb->data = handle; in uv__fsevents_init()
824 uv_async_init(handle->loop, handle->cf_cb, uv__fsevents_cb); in uv__fsevents_init()
825 handle->cf_cb->flags |= UV_HANDLE_INTERNAL; in uv__fsevents_init()
826 uv_unref((uv_handle_t*) handle->cf_cb); in uv__fsevents_init()
828 err = uv_mutex_init(&handle->cf_mutex); in uv__fsevents_init()
833 state = handle->loop->cf_state; in uv__fsevents_init()
834 uv_mutex_lock(&state->fsevent_mutex); in uv__fsevents_init()
835 uv__queue_insert_tail(&state->fsevent_handles, &handle->cf_member); in uv__fsevents_init()
836 state->fsevent_handle_count++; in uv__fsevents_init()
837 state->fsevent_need_reschedule = 1; in uv__fsevents_init()
838 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_init()
842 err = uv__cf_loop_signal(handle->loop, handle, kUVCFLoopSignalRegular); in uv__fsevents_init()
849 uv_mutex_destroy(&handle->cf_mutex); in uv__fsevents_init()
852 uv__free(handle->cf_cb); in uv__fsevents_init()
853 handle->cf_cb = NULL; in uv__fsevents_init()
856 uv__free(handle->realpath); in uv__fsevents_init()
857 handle->realpath = NULL; in uv__fsevents_init()
858 handle->realpath_len = 0; in uv__fsevents_init()
864 /* Runs in UV loop to de-initialize handle */
869 if (handle->cf_cb == NULL) in uv__fsevents_close()
873 state = handle->loop->cf_state; in uv__fsevents_close()
874 uv_mutex_lock(&state->fsevent_mutex); in uv__fsevents_close()
875 uv__queue_remove(&handle->cf_member); in uv__fsevents_close()
876 state->fsevent_handle_count--; in uv__fsevents_close()
877 state->fsevent_need_reschedule = 1; in uv__fsevents_close()
878 uv_mutex_unlock(&state->fsevent_mutex); in uv__fsevents_close()
882 err = uv__cf_loop_signal(handle->loop, handle, kUVCFLoopSignalClosing); in uv__fsevents_close()
887 uv_sem_wait(&state->fsevent_sem); in uv__fsevents_close()
889 uv_close((uv_handle_t*) handle->cf_cb, (uv_close_cb) uv__free); in uv__fsevents_close()
890 handle->cf_cb = NULL; in uv__fsevents_close()
897 uv_mutex_destroy(&handle->cf_mutex); in uv__fsevents_close()
898 uv__free(handle->realpath); in uv__fsevents_close()
899 handle->realpath = NULL; in uv__fsevents_close()
900 handle->realpath_len = 0; in uv__fsevents_close()