diff options
author | Sergei Golubchik <serg@mariadb.org> | 2015-09-03 12:58:41 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2015-09-03 12:58:41 +0200 |
commit | 530a6e74819ec14b5fdc42aa588b236ecb9f2fcd (patch) | |
tree | a4d45b1fd0e434c23577507364fa443226676eb5 /mysys/mf_keycache.c | |
parent | 5088cbf4ed7224698678f3eaf406361c6e7db4b8 (diff) | |
parent | 4b41e3c7f33714186c97a6cc2e6d3bb93b050c61 (diff) | |
download | mariadb-git-530a6e74819ec14b5fdc42aa588b236ecb9f2fcd.tar.gz |
Merge branch '10.0' into 10.1
referenced_by_foreign_key2(), needed for InnoDB to compile,
was taken from 10.0-galera
Diffstat (limited to 'mysys/mf_keycache.c')
-rw-r--r-- | mysys/mf_keycache.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index dc809df75cb..d9bc0e9094e 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -552,17 +552,21 @@ int init_simple_key_cache(SIMPLE_KEY_CACHE_CB *keycache, Allocate memory for blocks, hash_links and hash entries; For each block 2 hash links are allocated */ - if (my_multi_malloc(MYF(MY_ZEROFILL), - &keycache->block_root, blocks * sizeof(BLOCK_LINK), - &keycache->hash_root, - sizeof(HASH_LINK*) * keycache->hash_entries, - &keycache->hash_link_root, - hash_links * sizeof(HASH_LINK), - &keycache->changed_blocks, - sizeof(BLOCK_LINK*) * changed_blocks_hash_size, - &keycache->file_blocks, - sizeof(BLOCK_LINK*) * changed_blocks_hash_size, - NullS)) + if (my_multi_malloc_large(MYF(MY_ZEROFILL), + &keycache->block_root, + (ulonglong) (blocks * sizeof(BLOCK_LINK)), + &keycache->hash_root, + (ulonglong) (sizeof(HASH_LINK*) * + keycache->hash_entries), + &keycache->hash_link_root, + (ulonglong) (hash_links * sizeof(HASH_LINK)), + &keycache->changed_blocks, + (ulonglong) (sizeof(BLOCK_LINK*) * + changed_blocks_hash_size), + &keycache->file_blocks, + (ulonglong) (sizeof(BLOCK_LINK*) * + changed_blocks_hash_size), + NullS)) break; my_large_free(keycache->block_mem); keycache->block_mem= 0; @@ -1123,6 +1127,7 @@ static void wait_on_queue(KEYCACHE_WQUEUE *wqueue, struct st_my_thread_var *thread= my_thread_var; DBUG_ASSERT(!thread->next); DBUG_ASSERT(!thread->prev); /* Not required, but must be true anyway. */ + mysql_mutex_assert_owner(mutex); /* Add to queue. */ if (! (last= wqueue->last_thread)) @@ -1177,14 +1182,15 @@ static void release_whole_queue(KEYCACHE_WQUEUE *wqueue) do { thread=next; - DBUG_ASSERT(thread); + DBUG_ASSERT(thread && thread->init == 1); KEYCACHE_DBUG_PRINT("release_whole_queue: signal", ("thread %ld", thread->id)); - /* Signal the thread. */ - keycache_pthread_cond_signal(&thread->suspend); /* Take thread from queue. */ - next=thread->next; + next= thread->next; thread->next= NULL; + + /* Signal the thread. */ + keycache_pthread_cond_signal(&thread->suspend); } while (thread != last); |