+ lsn_target=0;
+ for (now=start;now<end;now+=PAGE_SIZE) {
+CaptiveSharedCacheMapObject_page *page;
+
+ page=captive_shared_cache_map_object->pages+now/PAGE_SIZE;
+ if (!page->data_valid)
+ continue;
+ if (!page->dirty)
+ continue;
+ if (!page->lsn_newest)
+ continue;
+ if (!lsn_target || lsn_target<page->lsn_newest)
+ lsn_target=page->lsn_newest;
+ }
+
+ 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 */
+ g_hash_table_foreach(
+ CaptiveSharedCacheMapObject_hash, /* hash_table */
+ (GHFunc)captive_shared_cache_map_flush_lsn_pages_foreach, /* func */
+ &lsn_pages_foreach_param); /* user_data */
+
+ lsn_pages_count=lsn_pages_foreach_param.lsn_pages_count;
+ captive_newn(lsn_pages_pointer,lsn_pages_count);
+ g_assert(lsn_pages_foreach_param.lsn_target==lsn_target);
+ lsn_pages_foreach_param.lsn_pages_count=0;
+ lsn_pages_foreach_param.lsn_pages_pointer=lsn_pages_pointer;
+ g_hash_table_foreach(
+ CaptiveSharedCacheMapObject_hash, /* hash_table */
+ (GHFunc)captive_shared_cache_map_flush_lsn_pages_foreach, /* func */
+ &lsn_pages_foreach_param); /* user_data */
+
+ g_assert(lsn_pages_foreach_param.lsn_target==lsn_target);
+ g_assert(lsn_pages_foreach_param.lsn_pages_count==lsn_pages_count);
+ g_assert(lsn_pages_foreach_param.lsn_pages_pointer==lsn_pages_pointer+lsn_pages_count);
+
+ qsort(lsn_pages_pointer,lsn_pages_count,sizeof(*lsn_pages_pointer),
+ (int (*)(const void *,const void *))captive_shared_cache_map_flush_lsn_pages_compar);
+