summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@netsurf-browser.org>2011-03-13 18:26:46 +0000
committerDaniel Silverstone <dsilvers@netsurf-browser.org>2011-03-13 18:26:46 +0000
commit93e9bfe3232fbcb3531acf07a870ed404c526f27 (patch)
tree7835b3cc4ac66d21fc64460c5f11f6e62760a042 /content
parentc615507e150592895980608d00601beed16d28b9 (diff)
downloadnetsurf-93e9bfe3232fbcb3531acf07a870ed404c526f27.tar.gz
netsurf-93e9bfe3232fbcb3531acf07a870ed404c526f27.tar.bz2
Shunt the schedule function definitions to desktop/schedule.h. Shunt the hlcache/llcache to using schedule to get their cleanups run.
svn path=/trunk/netsurf/; revision=12029
Diffstat (limited to 'content')
-rw-r--r--content/fetchers/curl.c1
-rw-r--r--content/hlcache.c52
-rw-r--r--content/hlcache.h9
-rw-r--r--content/llcache.c25
-rw-r--r--content/llcache.h11
5 files changed, 53 insertions, 45 deletions
diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c
index 895dc4256..8140aa64e 100644
--- a/content/fetchers/curl.c
+++ b/content/fetchers/curl.c
@@ -44,6 +44,7 @@
#include "content/urldb.h"
#include "desktop/netsurf.h"
#include "desktop/options.h"
+#include "desktop/schedule.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/url.h"
diff --git a/content/hlcache.c b/content/hlcache.c
index b31b0d4d8..08848e0aa 100644
--- a/content/hlcache.c
+++ b/content/hlcache.c
@@ -26,6 +26,7 @@
#include "content/content.h"
#include "content/hlcache.h"
+#include "desktop/schedule.h"
#include "utils/http.h"
#include "utils/log.h"
#include "utils/messages.h"
@@ -74,7 +75,8 @@ static hlcache_entry *hlcache_content_list;
/** Ring of retrieval contexts */
static hlcache_retrieval_ctx *hlcache_retrieval_ctx_ring;
-static void hlcache_clean(void);
+static void hlcache_clean(void *ignored);
+
static nserror hlcache_llcache_callback(llcache_handle *handle,
const llcache_event *event, void *pw);
static bool hlcache_type_is_acceptable(llcache_handle *llcache,
@@ -88,13 +90,31 @@ static void hlcache_content_callback(struct content *c,
* Public API *
******************************************************************************/
+nserror
+hlcache_initialise(llcache_query_callback cb, void *pw)
+{
+ nserror ret = llcache_initialise(cb, pw);
+
+ if (ret != NSERROR_OK)
+ return ret;
+
+ /* Schedule the cache cleanup for 5 seconds time */
+ schedule(500, hlcache_clean, NULL);
+
+ return NSERROR_OK;
+}
+
+
/* See hlcache.h for documentation */
void hlcache_finalise(void)
{
uint32_t num_contents, prev_contents;
hlcache_entry *entry;
hlcache_retrieval_ctx *ctx, *next;
-
+
+ /* Remove the hlcache_clean schedule */
+ schedule_remove(hlcache_clean, NULL);
+
/* Obtain initial count of contents remaining */
for (num_contents = 0, entry = hlcache_content_list;
entry != NULL; entry = entry->next) {
@@ -107,7 +127,7 @@ void hlcache_finalise(void)
do {
prev_contents = num_contents;
- hlcache_clean();
+ hlcache_clean(NULL);
for (num_contents = 0, entry = hlcache_content_list;
entry != NULL; entry = entry->next) {
@@ -123,7 +143,7 @@ void hlcache_finalise(void)
LOG((" %p : %s (%d users)", entry,
content_get_url(&entry_handle), content_count_users(entry->content)));
} else {
- LOG((" %p", entry));
+ LOG((" %p", entry));
}
}
@@ -155,23 +175,9 @@ void hlcache_finalise(void)
/* See hlcache.h for documentation */
nserror hlcache_poll(void)
{
- static uint32_t last_clean_time;
- uint32_t now;
llcache_poll();
- /* Only attempt to clean the cache every 5 seconds */
-#define HLCACHE_CLEAN_INTERVAL_CS (500)
- now = wallclock();
-
- if (now > last_clean_time + HLCACHE_CLEAN_INTERVAL_CS) {
- /* Give the cache a clean */
- hlcache_clean();
-
- last_clean_time = now;
- }
-#undef HLCACHE_CLEAN_INTERVAL_CS
-
return NSERROR_OK;
}
@@ -368,7 +374,7 @@ nserror hlcache_handle_replace_callback(hlcache_handle *handle,
/**
* Attempt to clean the cache
*/
-void hlcache_clean(void)
+void hlcache_clean(void *ignored)
{
hlcache_entry *entry, *next;
@@ -407,6 +413,12 @@ void hlcache_clean(void)
/* Destroy entry */
free(entry);
}
+
+ /* Attempt to clean the llcache */
+ llcache_clean();
+
+ /* Re-schedule ourselves for 5 seconds time */
+ schedule(500, hlcache_clean, NULL);
}
/**
@@ -447,7 +459,7 @@ nserror hlcache_llcache_callback(llcache_handle *handle,
llcache_handle_abort(handle);
llcache_handle_release(handle);
- free((char *) ctx->child.charset);
+ free((char *) ctx->child.charset);
free(ctx);
return error;
}
diff --git a/content/hlcache.h b/content/hlcache.h
index 5ed37203d..6738fea53 100644
--- a/content/hlcache.h
+++ b/content/hlcache.h
@@ -64,6 +64,15 @@ enum hlcache_retrieve_flag {
};
/**
+ * Initialise the high-level cache, preparing the llcache also.
+ *
+ * \param cb Query handler for llcache
+ * \param pw Pointer to llcache query handler data
+ * \return NSERROR_OK on success, appropriate error otherwise.
+ */
+nserror hlcache_initialise(llcache_query_callback cb, void *pw);
+
+/**
* Finalise the high-level cache, destroying any remaining contents
*/
void hlcache_finalise(void);
diff --git a/content/llcache.c b/content/llcache.c
index 1deb8cae9..893c505fb 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -193,8 +193,6 @@ static nserror llcache_object_notify_users(llcache_object *object);
static nserror llcache_object_snapshot(llcache_object *object,
llcache_object **snapshot);
-static nserror llcache_clean(void);
-
static nserror llcache_post_data_clone(const llcache_post_data *orig,
llcache_post_data **clone);
@@ -307,8 +305,6 @@ void llcache_finalise(void)
/* See llcache.h for documentation */
nserror llcache_poll(void)
{
- static uint32_t last_clean_time;
- uint32_t now;
llcache_object *object;
fetch_poll();
@@ -324,18 +320,6 @@ nserror llcache_poll(void)
llcache_object_notify_users(object);
}
- /* Only attempt to clean the cache every 5 seconds */
-#define LLCACHE_CLEAN_INTERVAL_CS (500)
- now = wallclock();
-
- if (now > last_clean_time + LLCACHE_CLEAN_INTERVAL_CS) {
- /* Attempt to clean the cache */
- llcache_clean();
-
- last_clean_time = now;
- }
-#undef LLCACHE_CLEAN_INTERVAL_CS
-
return NSERROR_OK;
}
@@ -1611,10 +1595,8 @@ nserror llcache_object_snapshot(llcache_object *object,
/**
* Attempt to clean the cache
- *
- * \return NSERROR_OK.
*/
-nserror llcache_clean(void)
+void llcache_clean(void)
{
llcache_object *object, *next;
uint32_t llcache_size = 0;
@@ -1697,7 +1679,6 @@ nserror llcache_clean(void)
LOG(("Size: %u", llcache_size));
#endif
- return NSERROR_OK;
}
/**
@@ -2241,8 +2222,8 @@ nserror llcache_fetch_split_header(const char *data, size_t len, char **name,
* \return NSERROR_OK on success, appropriate error otherwise
*
* \note This function also has the side-effect of updating
- * the cache control data for the object if an interesting
- * header is encountered
+ * the cache control data for the object if an interesting
+ * header is encountered
*/
nserror llcache_fetch_parse_header(llcache_object *object, const char *data,
size_t len, char **name, char **value)
diff --git a/content/llcache.h b/content/llcache.h
index d7958b056..215e6cc1a 100644
--- a/content/llcache.h
+++ b/content/llcache.h
@@ -166,15 +166,20 @@ nserror llcache_initialise(llcache_query_callback cb, void *pw);
void llcache_finalise(void);
/**
- * Cause the low-level cache to emit any pending notifications
- * and attempt to clean the cache. No guarantee is made about
- * what, if any, cache cleaning will occur.
+ * Cause the low-level cache to emit any pending notifications.
*
* \return NSERROR_OK on success, appropriate error otherwise.
*/
nserror llcache_poll(void);
/**
+ * Cause the low-level cache to attempt to perform cleanup. No
+ * guarantees are made as to whether or not cleanups will take
+ * place and what, if any, space savings will be made.
+ */
+void llcache_clean(void);
+
+/**
* Retrieve a handle for a low-level cache object
*
* \param url URL of the object to fetch