Dillo v3.1.1-119-g140d9ebd
|
#include <sys/types.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "msg.h"
#include "IO/Url.h"
#include "IO/IO.h"
#include "web.hh"
#include "dicache.h"
#include "nav.h"
#include "cookies.h"
#include "hsts.h"
#include "misc.h"
#include "capi.h"
#include "decode.h"
#include "auth.h"
#include "domain.h"
#include "timeout.hh"
#include "uicmd.hh"
Go to the source code of this file.
Macros | |
#define | MAX_INIT_BUF 1024*1024 |
Maximum initial size for the automatically-growing data buffer. | |
#define | HUGE_FILESIZE 15*1024*1024 |
Maximum filesize for a URL, before offering a download. | |
Functions | |
static CacheEntry_t * | Cache_process_queue (CacheEntry_t *entry) |
Update cache clients for a single cache-entry Tasks: | |
static void | Cache_delayed_process_queue (CacheEntry_t *entry) |
Set a call to Cache_process_queue from the main cycle. | |
static void | Cache_auth_entry (CacheEntry_t *entry, BrowserWindow *bw) |
Set a timeout function to ask for user/password. | |
static void | Cache_entry_inject (const DilloUrl *Url, Dstr *data_ds) |
Inject full page content directly into the cache. | |
static int | Cache_entry_cmp (const void *v1, const void *v2) |
Determine if two cache entries are equal (used by CachedURLs) | |
static int | Cache_entry_by_url_cmp (const void *v1, const void *v2) |
Determine if two cache entries are equal, using a URL as key. | |
void | a_Cache_init (void) |
Initialize cache data. | |
static int | Cache_client_enqueue (const DilloUrl *Url, DilloWeb *Web, CA_Callback_t Callback, void *CbData) |
Add a client to ClientQueue. | |
static int | Cache_client_by_key_cmp (const void *client, const void *key) |
Compare function for searching a Client by its key. | |
static void | Cache_client_dequeue (CacheClient_t *Client) |
Remove a client from the queue. | |
static void | Cache_entry_init (CacheEntry_t *NewEntry, const DilloUrl *Url) |
Set safe values for a new cache entry. | |
static CacheEntry_t * | Cache_entry_search (const DilloUrl *Url) |
Get the data structure for a cached URL (using 'Url' as the search key) If 'Url' isn't cached, return NULL. | |
static CacheEntry_t * | Cache_entry_search_with_redirect (const DilloUrl *Url) |
Given a URL, find its cache entry, following redirections. | |
static CacheEntry_t * | Cache_entry_add (const DilloUrl *Url) |
Allocate and set a new entry in the cache list. | |
static void | Cache_auth_free (Dlist *auth) |
Free Authentication fields. | |
static void | Cache_entry_free (CacheEntry_t *entry) |
Free the components of a CacheEntry_t struct. | |
static void | Cache_entry_remove (CacheEntry_t *entry, DilloUrl *url) |
Remove an entry, from the cache. | |
void | a_Cache_entry_remove_by_url (DilloUrl *url) |
Wrapper for capi. | |
int | a_Cache_open_url (void *web, CA_Callback_t Call, void *CbData) |
Try finding the url in the cache. | |
uint_t | a_Cache_get_flags (const DilloUrl *url) |
Get cache entry status. | |
uint_t | a_Cache_get_flags_with_redirection (const DilloUrl *url) |
Get cache entry status (following redirections). | |
static void | Cache_ref_data (CacheEntry_t *entry) |
Reference the cache data. | |
static void | Cache_unref_data (CacheEntry_t *entry) |
Unreference the cache data. | |
static const char * | Cache_current_content_type (CacheEntry_t *entry) |
Get current content type. | |
const char * | a_Cache_get_content_type (const DilloUrl *url) |
Get current Content-Type for cache entry found by URL. | |
static Dstr * | Cache_data (CacheEntry_t *entry) |
Get pointer to entry's data. | |
const char * | a_Cache_set_content_type (const DilloUrl *url, const char *ctype, const char *from) |
Change Content-Type for cache entry found by url. | |
int | a_Cache_get_buf (const DilloUrl *Url, char **PBuf, int *BufSize) |
Get the pointer to the URL document, and its size, from the cache entry. | |
void | a_Cache_unref_buf (const DilloUrl *Url) |
Unreference the data buffer when no longer using it. | |
static char * | Cache_parse_field (const char *header, const char *fieldname) |
Extract a single field from the header, allocating and storing the value in 'field'. | |
static Dlist * | Cache_parse_multiple_fields (const char *header, const char *fieldname) |
Extract multiple fields from the header. | |
static void | Cache_parse_header (CacheEntry_t *entry) |
Scan, allocate, and set things according to header info. | |
static int | Cache_get_header (CacheEntry_t *entry, const char *buf, size_t buf_size) |
Consume bytes until the whole header is got (up to a "\r\n\r\n" sequence) (Also unfold multi-line fields and strip '\r' chars from header) | |
static void | Cache_finish_msg (CacheEntry_t *entry) |
bool_t | a_Cache_process_dbuf (int Op, const char *buf, size_t buf_size, const DilloUrl *Url) |
Receive new data, update the reception buffer (for next read), update the cache, and service the client queue. | |
static int | Cache_redirect (CacheEntry_t *entry, int Flags, BrowserWindow *bw) |
Process redirections (HTTP 30x answers) (This is a work in progress –not finished yet) | |
static void | Cache_auth_callback (void *vdata) |
Ask for user/password and reload the page. | |
int | a_Cache_download_enabled (const DilloUrl *url) |
Check whether a URL scheme is downloadable. | |
static void | Cache_null_client (int Op, CacheClient_t *Client) |
Don't process data any further, but let the cache fill the entry. | |
static void | Cache_savelink_cb (void *vdata) |
Save link from behind a timeout so that Cache_process_queue() can get on with its work. | |
static void | Cache_provide_redirection_blocked_page (CacheEntry_t *entry, CacheClient_t *client) |
Let the client know that we're not following a redirection. | |
static void | Cache_delayed_process_queue_callback (void *ptr) |
Callback function for Cache_delayed_process_queue. | |
CacheClient_t * | a_Cache_client_get_if_unique (int Key) |
Last Client for this entry? | |
void | a_Cache_stop_client (int Key) |
Remove a client from the client queue TODO: notify the dicache and upper layers. | |
void | a_Cache_freeall (void) |
Memory deallocator (only called at exit time) | |
Variables | |
static Dlist * | CachedURLs |
A sorted list for cached data. | |
static Dlist * | ClientQueue |
A list for cache clients. | |
static Dlist * | DelayedQueue |
A list for delayed clients (it holds weak pointers to cache entries, which are used to make deferred calls to Cache_process_queue) | |
static uint_t | DelayedQueueIdleId = 0 |
#define HUGE_FILESIZE 15*1024*1024 |
#define MAX_INIT_BUF 1024*1024 |
CacheClient_t * a_Cache_client_get_if_unique | ( | int | Key | ) |
Last Client for this entry?
Definition at line 1399 of file cache.c.
References Cache_client_by_key_cmp(), ClientQueue, dList_find_custom(), dList_nth_data(), INT2VOIDP, and CacheClient::Url.
Referenced by a_Capi_stop_client().
int a_Cache_download_enabled | ( | const DilloUrl * | url | ) |
Check whether a URL scheme is downloadable.
Definition at line 1093 of file cache.c.
References dStrAsciiCasecmp(), and URL_SCHEME.
Referenced by a_Capi_open_url(), and Cache_process_queue().
void a_Cache_entry_remove_by_url | ( | DilloUrl * | url | ) |
Wrapper for capi.
Definition at line 357 of file cache.c.
References Cache_entry_remove().
Referenced by a_Capi_ccc().
void a_Cache_freeall | ( | void | ) |
Memory deallocator (only called at exit time)
Definition at line 1448 of file cache.c.
References Cache_client_dequeue(), Cache_entry_free(), CachedURLs, ClientQueue, dList_free(), dList_nth_data(), and dList_remove_fast().
Referenced by main().
int a_Cache_get_buf | ( | const DilloUrl * | Url, |
char ** | PBuf, | ||
int * | BufSize | ||
) |
Get the pointer to the URL document, and its size, from the cache entry.
Definition at line 552 of file cache.c.
References Cache_data(), Cache_entry_search_with_redirect(), Cache_ref_data(), Dstr::len, and Dstr::str.
Referenced by a_Capi_get_buf().
const char * a_Cache_get_content_type | ( | const DilloUrl * | url | ) |
Get current Content-Type for cache entry found by URL.
Definition at line 472 of file cache.c.
References Cache_current_content_type(), and Cache_entry_search_with_redirect().
Referenced by a_Capi_get_content_type().
Get cache entry status.
Definition at line 406 of file cache.c.
References Cache_entry_search().
Referenced by a_Capi_get_flags().
Get cache entry status (following redirections).
Definition at line 415 of file cache.c.
References Cache_entry_search_with_redirect().
Referenced by a_Capi_get_flags_with_redirection().
void a_Cache_init | ( | void | ) |
Initialize cache data.
Definition at line 118 of file cache.c.
References a_Url_free(), a_Url_new(), AboutSplash, Cache_entry_inject(), CachedURLs, ClientQueue, DelayedQueue, dList_new(), dStr_free(), and dStr_new().
Referenced by a_Capi_init().
int a_Cache_open_url | ( | void * | web, |
CA_Callback_t | Call, | ||
void * | CbData | ||
) |
Try finding the url in the cache.
If it hits, send the cache contents from there. If it misses, set up a new connection.
Definition at line 376 of file cache.c.
References Cache_client_enqueue(), Cache_delayed_process_queue(), Cache_entry_add(), Cache_entry_remove(), Cache_entry_search(), _DilloWeb::url, URL_E2EQuery, and URL_FLAGS.
Referenced by a_Capi_open_url().
Receive new data, update the reception buffer (for next read), update the cache, and service the client queue.
This function gets called whenever the IO has new data. 'Op' is the operation to perform 'VPtr' is a (void) pointer to the IO control structure
Definition at line 897 of file cache.c.
References _MSG, a_Bw_remove_client(), a_Decode_process(), a_Decode_transfer_finished(), a_Decode_transfer_process(), _DilloWeb::bw, CA_Aborted, CA_GotHeader, CA_GotLength, CA_KeepAlive, Cache_client_dequeue(), Cache_entry_search(), Cache_finish_msg(), Cache_get_header(), Cache_parse_header(), Cache_process_queue(), ClientQueue, dList_nth_data(), dReturn_val_if_fail, dStr_append_l(), dStr_free(), FALSE, IOAbort, IOClose, IORead, CacheClient::Key, Dstr::len, MSG, Dstr::str, TRUE, CacheClient::Url, URL_STR, and CacheClient::Web.
Referenced by a_Capi_ccc().
const char * a_Cache_set_content_type | ( | const DilloUrl * | url, |
const char * | ctype, | ||
const char * | from | ||
) |
Change Content-Type for cache entry found by url.
from = { "http" | "meta" }
Definition at line 492 of file cache.c.
References _MSG, a_Decode_charset_init(), a_Decode_free(), a_Misc_content_type_cmp(), a_Misc_parse_content_type(), Cache_current_content_type(), Cache_entry_search(), dFree(), dReturn_val_if_fail, dStr_free(), dStrconcat(), dStrdup(), dStrnAsciiCasecmp(), and URL_STR.
Referenced by a_Capi_set_content_type(), and Cache_parse_header().
void a_Cache_stop_client | ( | int | Key | ) |
Remove a client from the client queue TODO: notify the dicache and upper layers.
Definition at line 1419 of file cache.c.
References _MSG, a_Dicache_get_entry(), a_Dicache_unref(), Cache_client_by_key_cmp(), Cache_client_dequeue(), Cache_entry_search(), ClientQueue, DelayedQueue, dList_find_custom(), dList_remove(), INT2VOIDP, CacheClient::Url, and CacheClient::Version.
Referenced by a_Capi_stop_client(), and Cache_entry_remove().
void a_Cache_unref_buf | ( | const DilloUrl * | Url | ) |
Unreference the data buffer when no longer using it.
Definition at line 571 of file cache.c.
References Cache_entry_search_with_redirect(), and Cache_unref_data().
Referenced by a_Capi_unref_buf().
|
static |
Ask for user/password and reload the page.
Definition at line 1054 of file cache.c.
References a_Auth_do_auth(), a_Nav_reload(), a_Timeout_remove(), a_Url_free(), Cache_auth_entry(), Cache_auth_free(), and dFree().
Referenced by Cache_auth_entry().
|
static |
Set a timeout function to ask for user/password.
Definition at line 1069 of file cache.c.
References a_Timeout_add(), a_Url_dup(), Cache_auth_callback(), dNew, and MSG_WARN.
Referenced by Cache_auth_callback(), and Cache_process_queue().
|
static |
Free Authentication fields.
Definition at line 287 of file cache.c.
References dFree(), dList_free(), and dList_nth_data().
Referenced by Cache_auth_callback(), and Cache_entry_free().
|
static |
Compare function for searching a Client by its key.
Definition at line 170 of file cache.c.
References VOIDP2INT.
Referenced by a_Cache_client_get_if_unique(), and a_Cache_stop_client().
|
static |
Remove a client from the queue.
Definition at line 178 of file cache.c.
References a_Web_free(), ClientQueue, dFree(), dList_remove(), and CacheClient::Web.
Referenced by a_Cache_freeall(), a_Cache_process_dbuf(), a_Cache_stop_client(), and Cache_process_queue().
|
static |
Add a client to ClientQueue.
Definition at line 141 of file cache.c.
References CacheClient::Buf, CacheClient::BufSize, CacheClient::Callback, CacheClient::CbData, ClientQueue, dList_append(), dNew, CacheClient::Key, CacheClient::Url, CacheClient::Version, and CacheClient::Web.
Referenced by a_Cache_open_url().
|
static |
Get current content type.
Definition at line 463 of file cache.c.
Referenced by a_Cache_get_content_type(), a_Cache_set_content_type(), and Cache_process_queue().
|
static |
Get pointer to entry's data.
Definition at line 482 of file cache.c.
Referenced by a_Cache_get_buf(), and Cache_process_queue().
|
static |
Set a call to Cache_process_queue from the main cycle.
Definition at line 1381 of file cache.c.
References _MSG, a_Timeout_add(), Cache_delayed_process_queue_callback(), DelayedQueue, DelayedQueueIdleId, dList_append(), and dList_find().
Referenced by a_Cache_open_url().
|
static |
Callback function for Cache_delayed_process_queue.
Definition at line 1362 of file cache.c.
References a_Timeout_remove(), Cache_process_queue(), Cache_ref_data(), Cache_unref_data(), DelayedQueue, DelayedQueueIdleId, dList_nth_data(), and dList_remove().
Referenced by Cache_delayed_process_queue().
|
static |
Allocate and set a new entry in the cache list.
Definition at line 250 of file cache.c.
References Cache_entry_cmp(), Cache_entry_init(), Cache_entry_search(), CachedURLs, dList_insert_sorted(), dList_remove(), dNew, and MSG_WARN.
Referenced by a_Cache_open_url(), and Cache_entry_inject().
|
static |
Determine if two cache entries are equal, using a URL as key.
Definition at line 107 of file cache.c.
References a_Url_cmp().
Referenced by Cache_entry_search().
|
static |
Determine if two cache entries are equal (used by CachedURLs)
Definition at line 97 of file cache.c.
References a_Url_cmp().
Referenced by Cache_entry_add().
|
static |
Free the components of a CacheEntry_t struct.
Definition at line 299 of file cache.c.
References a_Decode_free(), a_Decode_transfer_free(), a_Url_free(), Cache_auth_free(), dFree(), dStr_free(), and TRUE.
Referenced by a_Cache_freeall(), and Cache_entry_remove().
|
static |
Set safe values for a new cache entry.
Definition at line 193 of file cache.c.
References a_Url_dup(), CA_InProgress, CA_IsEmpty, CA_KeepAlive, dStr_new(), and dStr_sized_new().
Referenced by Cache_entry_add().
Inject full page content directly into the cache.
Used for "about:splash". May be used for "about:cache" too.
Definition at line 269 of file cache.c.
References CA_GotHeader, CA_GotLength, CA_InternalUrl, Cache_entry_add(), Cache_entry_search(), dStr_append_l(), dStr_fit(), dStr_truncate(), Dstr::len, and Dstr::str.
Referenced by a_Cache_init().
|
static |
Remove an entry, from the cache.
All the entry clients are removed too! (it may stop rendering of this same resource on other windows, but nothing more).
Definition at line 325 of file cache.c.
References a_Cache_stop_client(), a_Dicache_invalidate_entry(), CA_InternalUrl, Cache_entry_free(), Cache_entry_search(), CachedURLs, ClientQueue, DelayedQueue, dList_nth_data(), dList_remove(), CacheClient::Key, and CacheClient::Url.
Referenced by a_Cache_entry_remove_by_url(), a_Cache_open_url(), and Cache_process_queue().
|
static |
Get the data structure for a cached URL (using 'Url' as the search key) If 'Url' isn't cached, return NULL.
Definition at line 218 of file cache.c.
References Cache_entry_by_url_cmp(), CachedURLs, and dList_find_sorted().
Referenced by a_Cache_get_flags(), a_Cache_open_url(), a_Cache_process_dbuf(), a_Cache_set_content_type(), a_Cache_stop_client(), Cache_entry_add(), Cache_entry_inject(), Cache_entry_remove(), and Cache_entry_search_with_redirect().
|
static |
Given a URL, find its cache entry, following redirections.
Definition at line 226 of file cache.c.
References _MSG_WARN, CA_Redirect, CA_RedirectLoop, Cache_entry_search(), and URL_STR_.
Referenced by a_Cache_get_buf(), a_Cache_get_content_type(), a_Cache_get_flags_with_redirection(), and a_Cache_unref_buf().
|
static |
Definition at line 855 of file cache.c.
References a_Decode_free(), a_Decode_transfer_free(), CA_GotHeader, CA_GotLength, CA_InProgress, Cache_process_queue(), Cache_unref_data(), dStr_fit(), MSG_HTTP, and URL_STR_.
Referenced by a_Cache_process_dbuf().
|
static |
Consume bytes until the whole header is got (up to a "\r\n\r\n" sequence) (Also unfold multi-line fields and strip '\r' chars from header)
Definition at line 824 of file cache.c.
References _MSG, CA_GotHeader, dStr_append_c(), dStr_erase(), dStr_fit(), Dstr::len, and Dstr::str.
Referenced by a_Cache_process_dbuf().
|
static |
Don't process data any further, but let the cache fill the entry.
(Currently used to handle WEB_RootUrl redirects, and to ignore image redirects –Jcid)
Definition at line 1107 of file cache.c.
References a_Bw_close_client(), _DilloWeb::bw, CA_Close, _DilloWeb::flags, CacheClient::Key, CacheClient::Web, and WEB_RootUrl.
Referenced by Cache_process_queue().
|
static |
Extract a single field from the header, allocating and storing the value in 'field'.
('fieldname' must not include the trailing ':')
Definition at line 583 of file cache.c.
References D_ASCII_TOLOWER, and dStrndup().
Referenced by Cache_parse_header().
|
static |
Scan, allocate, and set things according to header info.
(This function needs the whole header to work)
Definition at line 660 of file cache.c.
References _MSG, a_Cache_set_content_type(), a_Cookies_set(), a_Decode_content_init(), a_Decode_transfer_init(), a_Domain_permit(), a_Hsts_set(), a_Url_host_type(), a_Url_new(), a_Url_same_organization(), CA_ForceRedirect, CA_GotLength, CA_HugeFile, CA_KeepAlive, CA_NotFound, CA_Redirect, CA_TempRedirect, Cache_parse_field(), Cache_parse_multiple_fields(), Cache_ref_data(), ClientQueue, dFree(), dList_free(), dList_nth_data(), dStr_free(), dStr_new(), dStr_sized_new(), dStrAsciiCasecmp(), DilloPrefs::http_strict_transport_security, HUGE_FILESIZE, MAX, MAX_INIT_BUF, MIN, MSG, MSG_HTTP, prefs, _DilloWeb::requester, CacheClient::Url, URL_FLAGS, URL_Get, URL_HOST, URL_HOST_NAME, URL_Post, URL_SCHEME, URL_STR, URL_STR_, and CacheClient::Web.
Referenced by a_Cache_process_dbuf().
|
static |
Extract multiple fields from the header.
Definition at line 617 of file cache.c.
References D_ASCII_TOLOWER, dList_append(), dList_free(), dList_length(), dList_new(), and dStrndup().
Referenced by Cache_parse_header().
|
static |
Update cache clients for a single cache-entry Tasks:
TODO: Implement CA_Abort Op in client callback
Definition at line 1175 of file cache.c.
References _MSG, a_Bw_remove_client(), a_Cache_download_enabled(), a_Capi_conn_abort_by_url(), a_Dicache_cleanup(), a_Misc_content_type_check(), a_Misc_get_content_type_from_data(), a_Nav_cancel_expect_if_eq(), a_Timeout_add(), a_UIcmd_set_msg(), a_UIcmd_set_page_prog(), a_Url_dup(), a_Url_free(), a_Web_dispatch_by_type(), CacheClient::Buf, CacheClient::BufSize, _DilloWeb::bw, CA_Aborted, CA_Close, CA_GotContentType, CA_GotHeader, CA_HugeFile, CA_InProgress, CA_MsgErased, CA_NotFound, CA_Redirect, CA_Send, Cache_auth_entry(), Cache_client_dequeue(), Cache_current_content_type(), Cache_data(), Cache_entry_remove(), Cache_null_client(), Cache_provide_redirection_blocked_page(), Cache_redirect(), Cache_savelink_cb(), CacheClient::Callback, CacheClient::CbData, ClientQueue, dList_length(), dList_nth_data(), dNew, dStrdup(), FALSE, _DilloWeb::flags, CacheClient::Key, Dstr::len, MSG, MSG_ERR, MSG_HTTP, BrowserWindow::redirect_level, Dstr::str, TRUE, CacheClient::Url, CacheClient::Web, WEB_Download, and WEB_RootUrl.
Referenced by a_Cache_process_dbuf(), Cache_delayed_process_queue_callback(), and Cache_finish_msg().
|
static |
Let the client know that we're not following a redirection.
Definition at line 1145 of file cache.c.
References a_Web_dispatch_by_type(), CacheClient::Buf, CacheClient::BufSize, CA_Send, CacheClient::Callback, CacheClient::CbData, dFree(), dStrconcat(), URL_STR, and CacheClient::Web.
Referenced by Cache_process_queue().
|
static |
Process redirections (HTTP 30x answers) (This is a work in progress –not finished yet)
Definition at line 996 of file cache.c.
References _MSG, a_Nav_push(), a_UIcmd_set_msg(), a_Url_free(), a_Url_new(), a_Url_set_flags(), CA_ForceRedirect, CA_Redirect, CA_RedirectLoop, CA_TempRedirect, BrowserWindow::redirect_level, URL_E2EQuery, URL_FLAGS, URL_SpamSafe, URL_STR_, and WEB_RootUrl.
Referenced by Cache_process_queue().
|
static |
Reference the cache data.
Definition at line 424 of file cache.c.
References _MSG, a_Decode_process(), and dStr_free().
Referenced by a_Cache_get_buf(), Cache_delayed_process_queue_callback(), and Cache_parse_header().
|
static |
Save link from behind a timeout so that Cache_process_queue() can get on with its work.
Definition at line 1133 of file cache.c.
References a_UIcmd_save_link(), a_Url_free(), and dFree().
Referenced by Cache_process_queue().
|
static |
Unreference the cache data.
Definition at line 442 of file cache.c.
References _MSG, dStr_free(), and MSG_ERR.
Referenced by a_Cache_unref_buf(), Cache_delayed_process_queue_callback(), and Cache_finish_msg().
|
static |
A sorted list for cached data.
Holds pointers to CacheEntry_t structs
Definition at line 74 of file cache.c.
Referenced by a_Cache_freeall(), a_Cache_init(), Cache_entry_add(), Cache_entry_remove(), and Cache_entry_search().
|
static |
A list for cache clients.
Although implemented as a list, we'll call it ClientQueue –Jcid
Definition at line 78 of file cache.c.
Referenced by a_Cache_client_get_if_unique(), a_Cache_freeall(), a_Cache_init(), a_Cache_process_dbuf(), a_Cache_stop_client(), Cache_client_dequeue(), Cache_client_enqueue(), Cache_entry_remove(), Cache_parse_header(), and Cache_process_queue().
|
static |
A list for delayed clients (it holds weak pointers to cache entries, which are used to make deferred calls to Cache_process_queue)
Definition at line 82 of file cache.c.
Referenced by a_Cache_init(), a_Cache_stop_client(), Cache_delayed_process_queue(), Cache_delayed_process_queue_callback(), and Cache_entry_remove().
|
static |
Definition at line 83 of file cache.c.
Referenced by Cache_delayed_process_queue(), and Cache_delayed_process_queue_callback().