summaryrefslogtreecommitdiff
path: root/gio/glocalfilemonitor.h
AgeCommit message (Collapse)Author
2022-10-13Rename all visibility macrosXavier Claessens
2022-05-18gio: Add SPDX license headers automaticallyPhilip Withnall
Add SPDX license (but not copyright) headers to all files which follow a certain pattern in their existing non-machine-readable header comment. This commit was entirely generated using the command: ``` git ls-files gio/*.[ch] | xargs perl -0777 -pi -e 's/\n \*\n \* This library is free software; you can redistribute it and\/or\n \* modify it under the terms of the GNU Lesser General Public/\n \*\n \* SPDX-License-Identifier: LGPL-2.1-or-later\n \*\n \* This library is free software; you can redistribute it and\/or\n \* modify it under the terms of the GNU Lesser General Public/igs' ``` Signed-off-by: Philip Withnall <pwithnall@endlessos.org> Helps: #1415
2019-10-11gdesktopappinfo: Allocate DesktopFileDir structs dynamicallyPhilip Withnall
`DesktopFileDir` pointers are passed around between threads: they are initially created on the main thread, but a pointer to them is passed to the GLib worker thread in the file monitor callback (`desktop_file_dir_changed()`). Accordingly, the `DesktopFileDir` objects either have to be (1) immutable; (2) reference counted; or (3) synchronised between the two threads to avoid one of them being used by one thread after being freed on another. Option (1) changed with commit 99bc33b6 and is no longer an option. Option (3) would mean blocking the main thread on the worker thread, which would be hard to achieve and is against the point of having a worker thread. So that leaves option (2), which is implemented here. Signed-off-by: Philip Withnall <withnall@endlessm.com> Fixes: #1903
2017-05-29gio/: LGPLv2+ -> LGPLv2.1+Sébastien Wilmet
Sub-directories inside gio/ already processed in a previous commit: - fam/ - gdbus-2.0/ (which contains only codegen/) - gvdb/ - inotify/ - tests/ - win32/ - xdgmime/ Other sub-directories inside gio/: - completion/: no license headers - kqueue/: not LGPL, BSD-style license https://bugzilla.gnome.org/show_bug.cgi?id=776504
2015-03-20GFileMonitorSource: return "interesting" valueRyan Lortie
Return an "interesting" boolean from the event handler function on GFileMonitorSource. An event was "interesting" if it will result in a signal actually being dispatched to the user. It is "uninteresting" if it only hit an already-dirty rate limiter. We will use this information to do some backing off in the backends when faced with a flood of uninteresting events.
2015-03-20substantially rework file monitorsRyan Lortie
Remove all event merging and dispatch logic from GFileMonitor. The only implementation of GFileMonitor outside of glib is in gvfs and it already does these things properly. Get rid of GLocalDirectoryMonitor. We will use a single class, GLocalFileMonitor, for both directory and file monitoring. This will prevent every single backend from having to create two objects separately (eg: ginotifydirectorymonitor.c and ginotifyfilemonitor.c). Introduce GFileMonitorSource as a thread-safe cross-context dispatch mechanism. Put it in GLocalFileMonitor. All backends will be expected to dispatch via the source and not touch the GFileMonitor object at all from the worker thread. Remove all construct properties from GLocalFileMonitor and remove the "context" construct property from GFileMonitor. All backends must now get the information about what file to monitor from the ->start() call which is mandatory to implement. Remove the implementation of rate limiting in GFileMonitor and add an implementation in GLocalFileMonitor. gvfs never did anything with this anyway, but if it wanted to, it would have to implement it for itself. This was done in order to get the rate_limit field into the GFileMonitorSource so that it could be safely accessed from the worker thread. Expose g_local_file_is_remote() internally for NFS detection. With the "is_remote" functionality exposed, we can now move all functions for creating local file monitors to a proper location in glocalfilemonitor.c Port the inotify backend to adjust to the changes above. None of the other backends are ported yet. Those will come in future commits.
2014-01-31Updated FSF's addressDaniel Mustieles
2013-10-03glocalfile: add private worker monitor APIsRyan Lortie
Add a convenient and race-free method of watching local files from the GLib worker thread. Without this, the race-free way to create a monitor that dispatches events to the worker thread looked something like this: - dispatch an idle to the worker thread - from the idle, create the monitor and connect signals - from the original thread, wait (on a cond?) until the worker thread has finished setting up the monitor - read the file that you were monitoring which is just ridiculously complicated... To use the new API: monitor = g_local_file_monitor_new_in_worker ("/path/to/some/file", G_FILE_MONITOR_NONE, &error); g_assert_no_error (error); g_signal_connect (monitor, "changed", G_CALLBACK (callback), NULL); g_local_file_monitor_start (monitor); 'callback' will run from the GLib worker thread. This is the reason that the start() call was introduced in the previous commit. The backends that don't use the start() call will have a very thin race between creating the monitor and connecting the signal, but hopefully they will be fixed soon. These new APIs will be used (at least) from gdesktopappinfo to watch for changes in the desktop file directories. https://bugzilla.gnome.org/show_bug.cgi?id=704887
2013-10-03local monitors: make more idiomatic use of GObjectRyan Lortie
Stop abusing constructor() to do startup work, adding _start() calls instead. The backends themselves still use constructor() although a patch will be following to also fix inotify. The reason for using a separate start() call instead of constructed() will become apparent in future commits. https://bugzilla.gnome.org/show_bug.cgi?id=704887
2013-01-19localfile: add support for monitoring on NFSRyan Lortie
Add a pair of new extension points: 'gio-nfs-file-monitor' and 'gio-nfs-directory-monitor'. Add a check to GLocalFile when creating a file monitor. If the requested file is in the user's home directory and the user has an NFS home directory then attempt to use an implementation of one of the new extension points. If we don't have any implementations then fall back to the normal "local" monitors. https://bugzilla.gnome.org/show_bug.cgi?id=592211
2013-01-14glocal*monitor: export ABI only on UNIXRyan Lortie
Add an #ifdef G_OS_UNIX around the GLIB_AVAILABLE_IN_ALL annotation on the _get_type() functions for GLocal{File,Directory}Monitor. These symbols are in private header files and are only exported so that the in-tree file monitoring modules can subclass. This is only needed on UNIX and was therefore never part of the public ABI on Windows. Caught by Dieter Verfaillie.
2013-01-13various: add GLIB_AVAILABLE_IN_ALL everywhere elseRyan Lortie
Add the GLIB_AVAILABLE_IN_ALL annotation to all old functions (that haven't already been annotated with the GLIB_AVAILABLE_IN_* macros or a deprecation macro). If we discover in the future that we cannot use only one macro on Windows, it will be an easy sed patch to fix that. https://bugzilla.gnome.org/show_bug.cgi?id=688681
2010-02-18GLocalFileMonitor: Support for GFileMonitorFlagsChristian Kellner
Evaluate and remember GFileMonitorFlags. This is a part of move event support for fs-monitoring (bug #547890).
2008-09-02big header formatting cleanup: indentation, vtable formatting, consistentMichael Natterer
2008-09-02 Michael Natterer <mitch@imendio.com> * *.h: big header formatting cleanup: indentation, vtable formatting, consistent spacing in (* vfunc), trailing whitespace removal. Formatting should be pretty consistent in all GIO headers now. svn path=/trunk/; revision=7433
2008-07-01Moved all relevant typedefs into these files.Cody Russell
2008-07-01 Cody Russell <bratsche@gnome.org> * gio/gioenums.h: * gio/giotypes.h: Moved all relevant typedefs into these files. * gio/*.[ch]: Updated wrt added files. Split types into separate file for easier maintainership. (#538564) svn path=/trunk/; revision=7127
2008-02-11Documentation additionsMatthias Clasen
svn path=/trunk/; revision=6492
2008-01-28Add registration hooks for extension points. Register the gio extensionAlexander Larsson
2008-01-28 Alexander Larsson <alexl@redhat.com> * giomodule.[ch]: * gio.symbols: Add registration hooks for extension points. Register the gio extension points. * fam/gfamdirectorymonitor.c: * fam/gfamfilemonitor.c: * glocaldirectorymonitor.[ch]: * glocalfilemonitor.[ch]: * gnativevolumemonitor.h: * gunionvolumemonitor.c: * gunixvolumemonitor.c: * gvfs.[ch]: * gvolumemonitor.h: * inotify/ginotifydirectorymonitor.c: * inotify/ginotifyfilemonitor.c: Use the extension points registration instead of g_type_children(). svn path=/trunk/; revision=6399
2008-01-14Add GError to file monitor callsAlexander Larsson
2008-01-14 Alexander Larsson <alexl@redhat.com> * gfile.[ch]: (g_file_monitor_directory): (g_file_monitor_file): Add GError to file monitor calls * glocaldirectorymonitor.c: * glocaldirectorymonitor.h: * glocalfile.c: * glocalfilemonitor.c: * glocalfilemonitor.h: * gunixmounts.c: Update for above change svn path=/trunk/; revision=6306
2007-12-19Make g_io_modules_load_all_in_directory not unuse loaded modules so thatAlexander Larsson
2007-12-19 Alexander Larsson <alexl@redhat.com> * giomodule.c: Make g_io_modules_load_all_in_directory not unuse loaded modules so that users of it can do stuff before unloading. Init internal "module" types. Initialize static prio and name for types so that we don't have to load modules to get it. * gnativevolumemonitor.h: * gvolumemonitor.h: Move is_supported to parent class so that non-native monitors can avoid being initialized too. (For instance GDaemonVolumeMonitor if we're not using GDaemonVfs.) * glocaldirectorymonitor.[ch]: * glocalfilemonitor.[ch]: * gunionvolumemonitor.c: * gunixvolumemonitor.c: * gvfs.c: Find plugins using the static prio+name to avoid unnecessarily loading the modules. svn path=/trunk/; revision=6159
2007-11-28Removed unnecessary fileAlexander Larsson
2007-11-28 Alexander Larsson <alexl@redhat.com> * Makefile.am: * gdriveprivate.h: Removed unnecessary file * gdesktopappinfo.[ch]: * gdummyfile.[ch]: * gfile.c: * glocaldirectorymonitor.[ch]: * glocalfile.[ch]: * glocalfileenumerator.[ch]: * glocalfileinputstream.[ch]: * glocalfilemonitor.[ch]: * glocalfileoutputstream.[ch]: * glocalvfs.[ch]: * gnativevolumemonitor.c: * gpollfilemonitor.[ch]: * gunionvolumemonitor.[ch]: * gunixdrive.[ch]: * gunixvolume.[ch]: * gunixvolumemonitor.[ch]: * gvfs.c: * gvolumeprivate.h: * inotify/ginotifydirectorymonitor.[ch]: * inotify/ginotifyfilemonitor.[ch]: * inotify/inotify-helper.c: Append _ to all internal functions * gio.symbols: Add missing symbols Export symbols needed for modules svn path=/trunk/; revision=5977
2007-11-26gio/ docs/reference/gio Merged gio-standalone into glib.Alexander Larsson
2007-11-26 Alexander Larsson <alexl@redhat.com> * Makefile.am: * configure.in: * gio-2.0-uninstalled.pc.in: * gio-2.0.pc.in: * gio-unix-2.0-uninstalled.pc.in: * gio-unix-2.0.pc.in: * gio/ * docs/reference/gio Merged gio-standalone into glib. * glib/glibintl.h: * glib/gutils.c: Export glib_gettext so that gio can use it Add P_ (using same domain for now) Add I_ as g_intern_static_string svn path=/trunk/; revision=5941