+captive_shared_cache_map_memory_range_set_dirty(): Set dirty by buffer address.
authorshort <>
Sun, 30 Nov 2003 10:06:09 +0000 (10:06 +0000)
committershort <>
Sun, 30 Nov 2003 10:06:09 +0000 (10:06 +0000)
src/libcaptive/cc/sharedcachemap.c
src/libcaptive/cc/sharedcachemap.h

index b278008..6f8bfcf 100644 (file)
@@ -540,6 +540,61 @@ CaptiveSharedCacheMapObject_page *page;
                }
 }
 
+typedef struct _captive_shared_cache_map_memory_range_set_dirty_param
+               captive_shared_cache_map_memory_range_set_dirty_param;
+struct _captive_shared_cache_map_memory_range_set_dirty_param {
+       gpointer address_start;
+       gpointer address_end;
+       guint64 bytes_set;
+       };
+
+static void captive_shared_cache_map_memory_range_set_dirty_foreach(
+               CaptiveSharedCacheMapObject *captive_shared_cache_map_object,  /* key */
+               CaptiveSharedCacheMapObject *captive_shared_cache_map_object_value,  /* value */
+               captive_shared_cache_map_memory_range_set_dirty_param *param)   /* user_data */
+{
+gpointer address_start_local,address_end_local;
+
+       g_return_if_fail(CAPTIVE_SHARED_CACHE_MAP_IS_OBJECT(captive_shared_cache_map_object));
+       g_return_if_fail(captive_shared_cache_map_object==captive_shared_cache_map_object_value);
+       g_return_if_fail(param!=NULL);
+
+       address_start_local=MAX(param->address_start,captive_shared_cache_map_object->buffer);
+       address_end_local=MIN(param->address_end,captive_shared_cache_map_object->buffer+captive_shared_cache_map_object->AllocationSize);
+
+       if (address_start_local>address_end_local)
+               return;
+
+       captive_shared_cache_map_set_dirty(captive_shared_cache_map_object,
+                       address_start_local-captive_shared_cache_map_object->buffer,    /* start */
+                       address_end_local  -captive_shared_cache_map_object->buffer);   /* end */
+
+       param->bytes_set+=(address_end_local-address_start_local);
+}
+
+guint64 captive_shared_cache_map_memory_range_set_dirty(gpointer address_start,gpointer address_end)
+{
+captive_shared_cache_map_memory_range_set_dirty_param set_dirty_param;
+
+       g_return_val_if_fail(address_start!=NULL,0);
+       g_return_val_if_fail(address_end!=NULL,0);
+       g_return_val_if_fail(address_start<=address_end,0);
+
+       address_start=CAPTIVE_ROUND_DOWN(address_start,PAGE_SIZE);
+       address_end=CAPTIVE_ROUND_UP(address_end,PAGE_SIZE);
+
+       CaptiveSharedCacheMapObject_hash_init();
+       set_dirty_param.address_start=address_start;
+       set_dirty_param.address_end=address_end;
+       set_dirty_param.bytes_set=0;
+       g_hash_table_foreach(
+                       CaptiveSharedCacheMapObject_hash,       /* hash_table */
+                       (GHFunc)captive_shared_cache_map_memory_range_set_dirty_foreach,        /* func */
+                       &set_dirty_param);      /* user_data */
+
+       return set_dirty_param.bytes_set;
+}
+
 gboolean captive_shared_cache_map_is_page_dirty(CaptiveSharedCacheMapObject *captive_shared_cache_map_object,
                guint64 offset)
 {
@@ -763,6 +818,8 @@ CaptiveSharedCacheMapObject_page *page;
                        lsn_target=page->lsn_newest;
                }
 
+       CaptiveSharedCacheMapObject_hash_init();
+
        lsn_pages_foreach_param.lsn_target=lsn_target;
        lsn_pages_foreach_param.lsn_pages_count=0;
        lsn_pages_foreach_param.lsn_pages_pointer=NULL; /* Not yet filling */
index bb3de81..a3737b5 100644 (file)
@@ -59,6 +59,7 @@ void captive_shared_cache_map_set_data_invalid(CaptiveSharedCacheMapObject *capt
                guint64 start,guint64 end);
 void captive_shared_cache_map_set_dirty(CaptiveSharedCacheMapObject *captive_shared_cache_map_object,
                guint64 start,guint64 end);
+guint64 captive_shared_cache_map_memory_range_set_dirty(gpointer address_start,gpointer address_end);
 gboolean captive_shared_cache_map_is_page_dirty(CaptiveSharedCacheMapObject *captive_shared_cache_map_object,
                guint64 offset);
 void captive_shared_cache_map_page_set_lsn(CaptiveSharedCacheMapObject *captive_shared_cache_map_object,