nautilus r14847 - in trunk: . libnautilus-private
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: nautilus r14847 - in trunk: . libnautilus-private
- Date: Tue, 13 Jan 2009 10:56:54 +0000 (UTC)
Author: alexl
Date: Tue Jan 13 10:56:53 2009
New Revision: 14847
URL: http://svn.gnome.org/viewvc/nautilus?rev=14847&view=rev
Log:
2009-01-13 Alexander Larsson <alexl redhat com>
* libnautilus-private/nautilus-directory-async.c:
* libnautilus-private/nautilus-directory-private.h:
Count all outstanding monitor and call_when_ready details
Modified:
trunk/ChangeLog
trunk/libnautilus-private/nautilus-directory-async.c
trunk/libnautilus-private/nautilus-directory-private.h
Modified: trunk/libnautilus-private/nautilus-directory-async.c
==============================================================================
--- trunk/libnautilus-private/nautilus-directory-async.c (original)
+++ trunk/libnautilus-private/nautilus-directory-async.c Tue Jan 13 10:56:53 2009
@@ -278,6 +278,32 @@
g_hash_table_destroy (table);
}
+static void
+request_counter_add_request (RequestCounter counter,
+ Request request)
+{
+ guint i;
+
+ for (i = 0; i < REQUEST_TYPE_LAST; i++) {
+ if (REQUEST_WANTS_TYPE (request, i)) {
+ counter[i]++;
+ }
+ }
+}
+
+static void
+request_counter_remove_request (RequestCounter counter,
+ Request request)
+{
+ guint i;
+
+ for (i = 0; i < REQUEST_TYPE_LAST; i++) {
+ if (REQUEST_WANTS_TYPE (request, i)) {
+ counter[i]++;
+ }
+ }
+}
+
/* Start a job. This is really just a way of limiting the number of
* async. requests that we issue at any given time. Without this, the
* number of requests is unbounded.
@@ -578,10 +604,15 @@
remove_monitor_link (NautilusDirectory *directory,
GList *link)
{
+ Monitor *monitor;
+
if (link != NULL) {
+ monitor = link->data;
+ request_counter_remove_request (directory->details->monitor_counters,
+ monitor->request);
directory->details->monitor_list =
g_list_remove_link (directory->details->monitor_list, link);
- g_free (link->data);
+ g_free (monitor);
g_list_free_1 (link);
}
}
@@ -703,6 +734,8 @@
}
directory->details->monitor_list =
g_list_prepend (directory->details->monitor_list, monitor);
+ request_counter_add_request (directory->details->monitor_counters,
+ monitor->request);
if (callback != NULL) {
file_list = nautilus_directory_get_file_list (directory);
@@ -1347,6 +1380,8 @@
directory->details->call_when_ready_list = g_list_prepend
(directory->details->call_when_ready_list,
g_memdup (&callback, sizeof (callback)));
+ request_counter_add_request (directory->details->call_when_ready_counters,
+ callback.request);
/* When we change the ready list we need to sync up metadata monitors.
* We could just call update_metadata_monitors here, but we can be smarter
@@ -1384,8 +1419,15 @@
remove_callback_link_keep_data (NautilusDirectory *directory,
GList *link)
{
+ ReadyCallback *callback;
+
+ callback = link->data;
+
directory->details->call_when_ready_list = g_list_remove_link
(directory->details->call_when_ready_list, link);
+
+ request_counter_remove_request (directory->details->call_when_ready_counters,
+ callback->request);
g_list_free_1 (link);
}
@@ -1393,8 +1435,11 @@
remove_callback_link (NautilusDirectory *directory,
GList *link)
{
- g_free (link->data);
+ ReadyCallback *callback;
+
+ callback = link->data;
remove_callback_link_keep_data (directory, link);
+ g_free (callback);
}
void
Modified: trunk/libnautilus-private/nautilus-directory-private.h
==============================================================================
--- trunk/libnautilus-private/nautilus-directory-private.h (original)
+++ trunk/libnautilus-private/nautilus-directory-private.h Tue Jan 13 10:56:53 2009
@@ -46,6 +46,30 @@
typedef struct MountState MountState;
typedef struct FilesystemInfoState FilesystemInfoState;
+typedef enum {
+ REQUEST_LINK_INFO,
+ REQUEST_DEEP_COUNT,
+ REQUEST_DIRECTORY_COUNT,
+ REQUEST_FILE_INFO,
+ REQUEST_FILE_LIST, /* always FALSE if file != NULL */
+ REQUEST_METAFILE,
+ REQUEST_MIME_LIST,
+ REQUEST_TOP_LEFT_TEXT,
+ REQUEST_LARGE_TOP_LEFT_TEXT,
+ REQUEST_EXTENSION_INFO,
+ REQUEST_THUMBNAIL,
+ REQUEST_MOUNT,
+ REQUEST_FILESYSTEM_INFO,
+ REQUEST_TYPE_LAST
+} RequestType;
+
+/* A request for information about one or more files. */
+typedef guint32 Request;
+typedef guint32 RequestCounter[REQUEST_TYPE_LAST];
+
+#define REQUEST_WANTS_TYPE(request, type) (request && (1<<type))
+#define REQUEST_SET_TYPE(request, type) request |= (1<<type)
+
struct NautilusDirectoryDetails
{
/* The location. */
@@ -65,7 +89,9 @@
* are going to get big, we can use hash tables instead.
*/
GList *call_when_ready_list;
+ RequestCounter call_when_ready_counters;
GList *monitor_list;
+ RequestCounter monitor_counters;
guint call_ready_idle_id;
NautilusMonitor *monitor;
@@ -119,29 +145,6 @@
GHashTable *hidden_file_hash;
};
-typedef enum {
- REQUEST_LINK_INFO,
- REQUEST_DEEP_COUNT,
- REQUEST_DIRECTORY_COUNT,
- REQUEST_FILE_INFO,
- REQUEST_FILE_LIST, /* always FALSE if file != NULL */
- REQUEST_METAFILE,
- REQUEST_MIME_LIST,
- REQUEST_TOP_LEFT_TEXT,
- REQUEST_LARGE_TOP_LEFT_TEXT,
- REQUEST_EXTENSION_INFO,
- REQUEST_THUMBNAIL,
- REQUEST_MOUNT,
- REQUEST_FILESYSTEM_INFO,
- REQUEST_TYPE_LAST
-} RequestType;
-
-/* A request for information about one or more files. */
-typedef guint32 Request;
-
-#define REQUEST_WANTS_TYPE(request, type) (request && (1<<type))
-#define REQUEST_SET_TYPE(request, type) request |= (1<<type)
-
NautilusDirectory *nautilus_directory_get_existing (GFile *location);
/* async. interface */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]