231
231
(ulong) (f)) & (keycache->hash_entries-1))
232
232
#define FILE_HASH(f) ((uint) (f) & (CHANGED_BLOCKS_HASH-1))
234
#define DEFAULT_KEYCACHE_DEBUG_LOG "keycache_debug.log"
236
#if defined(KEYCACHE_DEBUG) && ! defined(KEYCACHE_DEBUG_LOG)
237
#define KEYCACHE_DEBUG_LOG DEFAULT_KEYCACHE_DEBUG_LOG
240
#if defined(KEYCACHE_DEBUG_LOG)
241
static FILE *keycache_debug_log=NULL;
242
static void keycache_debug_print _VARARGS((const char *fmt,...));
243
#define KEYCACHE_DEBUG_OPEN \
244
if (!keycache_debug_log) \
246
keycache_debug_log= fopen(KEYCACHE_DEBUG_LOG, "w"); \
247
(void) setvbuf(keycache_debug_log, NULL, _IOLBF, BUFSIZ); \
250
#define KEYCACHE_DEBUG_CLOSE \
251
if (keycache_debug_log) \
253
fclose(keycache_debug_log); \
254
keycache_debug_log= 0; \
257
#define KEYCACHE_DEBUG_OPEN
258
#define KEYCACHE_DEBUG_CLOSE
259
#endif /* defined(KEYCACHE_DEBUG_LOG) */
234
#define BLOCK_NUMBER(b) \
235
((uint) (((char*)(b)-(char *) keycache->block_root)/sizeof(BLOCK_LINK)))
236
#define HASH_LINK_NUMBER(h) \
237
((uint) (((char*)(h)-(char *) keycache->hash_link_root)/sizeof(HASH_LINK)))
261
239
#if defined(KEYCACHE_DEBUG_LOG) && defined(KEYCACHE_DEBUG)
262
#define KEYCACHE_DBUG_PRINT(l, m) \
263
{ if (keycache_debug_log) fprintf(keycache_debug_log, "%s: ", l); \
264
keycache_debug_print m; }
266
240
#define KEYCACHE_DBUG_ASSERT(a) \
267
241
{ if (! (a) && keycache_debug_log) fclose(keycache_debug_log); \
270
#define KEYCACHE_DBUG_PRINT(l, m) DBUG_PRINT(l, m)
271
244
#define KEYCACHE_DBUG_ASSERT(a) DBUG_ASSERT(a)
272
245
#endif /* defined(KEYCACHE_DEBUG_LOG) && defined(KEYCACHE_DEBUG) */
274
#if defined(KEYCACHE_DEBUG) || !defined(DBUG_OFF)
275
static long keycache_thread_id;
276
#define KEYCACHE_THREAD_TRACE(l) \
277
KEYCACHE_DBUG_PRINT(l,("|thread %ld",keycache_thread_id))
279
#define KEYCACHE_THREAD_TRACE_BEGIN(l) \
280
{ struct st_my_thread_var *thread_var= my_thread_var; \
281
keycache_thread_id= thread_var->id; \
282
KEYCACHE_DBUG_PRINT(l,("[thread %ld",keycache_thread_id)) }
284
#define KEYCACHE_THREAD_TRACE_END(l) \
285
KEYCACHE_DBUG_PRINT(l,("]thread %ld",keycache_thread_id))
287
#define KEYCACHE_THREAD_TRACE_BEGIN(l)
288
#define KEYCACHE_THREAD_TRACE_END(l)
289
#define KEYCACHE_THREAD_TRACE(l)
290
#endif /* defined(KEYCACHE_DEBUG) || !defined(DBUG_OFF) */
292
#define BLOCK_NUMBER(b) \
293
((uint) (((char*)(b)-(char *) keycache->block_root)/sizeof(BLOCK_LINK)))
294
#define HASH_LINK_NUMBER(h) \
295
((uint) (((char*)(h)-(char *) keycache->hash_link_root)/sizeof(HASH_LINK)))
297
247
#if (defined(KEYCACHE_TIMEOUT)) || defined(KEYCACHE_DEBUG)
298
248
static int keycache_pthread_cond_wait(pthread_cond_t *cond,
299
249
pthread_mutex_t *mutex);
301
251
#define keycache_pthread_cond_wait pthread_cond_wait
304
#if defined(KEYCACHE_DEBUG)
305
static int keycache_pthread_mutex_lock(pthread_mutex_t *mutex);
306
static void keycache_pthread_mutex_unlock(pthread_mutex_t *mutex);
307
static int keycache_pthread_cond_signal(pthread_cond_t *cond);
309
254
#define keycache_pthread_mutex_lock pthread_mutex_lock
310
255
#define keycache_pthread_mutex_unlock pthread_mutex_unlock
311
256
#define keycache_pthread_cond_signal pthread_cond_signal
312
#endif /* defined(KEYCACHE_DEBUG) */
314
#if !defined(DBUG_OFF)
318
#define inline /* disabled inline for easier debugging */
319
258
static int fail_block(BLOCK_LINK *block);
320
259
static int fail_hlink(HASH_LINK *hlink);
321
260
static int cache_empty(KEY_CACHE *keycache);
324
262
static inline uint next_power(uint value)
541
478
if (!keycache->key_cache_inited)
542
DBUG_RETURN(keycache->disk_blocks);
479
return(keycache->disk_blocks);
544
481
if(key_cache_block_size == keycache->key_cache_block_size &&
545
482
use_mem == keycache->key_cache_mem_size)
547
484
change_key_cache_param(keycache, division_limit, age_threshold);
548
DBUG_RETURN(keycache->disk_blocks);
485
return(keycache->disk_blocks);
551
488
keycache_pthread_mutex_lock(&keycache->cache_lock);