/********************************************************************//**
Inits a page to the buffer buf_pool. */
static __attribute__((nonnull))
void
buf_page_init(
/*==========*/
    buf_pool_t*    buf_pool,/*!< in/out: buffer pool */
    ulint        space,    /*!< in: space id */
    ulint        offset,    /*!< in: offset of the page within space
                in units of a page */
    ulint        fold,    /*!< in: buf_page_address_fold(space,offset) */
    ulint        zip_size,/*!< in: compressed page size, or 0 */
    buf_block_t*    block)    /*!< in/out: block to init */
{
    buf_page_t*    hash_page;

    ut_ad(buf_pool == buf_pool_get(space, offset));
    ut_ad(buf_pool_mutex_own(buf_pool));
    ut_ad(mutex_own(&(block->mutex)));
    ut_a(buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE);

    /* Set the state of the block */
    buf_block_set_file_page(block, space, offset);
    buf_block_init_low(block);

    block->lock_hash_val = lock_rec_hash(space, offset);

    buf_page_init_low(&block->page);

    /* Insert into the hash table of file pages */

    hash_page = buf_page_hash_get_low(buf_pool, space, offset, fold);//在hash中查找page 详见   if (UNIV_LIKELY(!hash_page)) {
    } else if (buf_pool_watch_is_sentinel(buf_pool, hash_page)) {
        /* Preserve the reference count. */
        ulint    buf_fix_count = hash_page->buf_fix_count;

        ut_a(buf_fix_count > );
        block->page.buf_fix_count += buf_fix_count;
        buf_pool_watch_remove(buf_pool, fold, hash_page);
    } else {
        fprintf(stderr,
            "InnoDB: Error: page %lu %lu already found"
            " in the hash table: %p, %p\n",
            (ulong) space,
            (ulong) offset,
            (const void*) hash_page, (const void*) block);
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
        mutex_exit(&block->mutex);
        buf_pool_mutex_exit(buf_pool);
        buf_print();
        buf_LRU_print();
        buf_validate();
        buf_LRU_validate();
#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
        ut_error;
    }

    ut_ad(!block->page.in_zip_hash);
    ut_ad(!block->page.in_page_hash);
    ut_d(block->page.in_page_hash = TRUE);
    HASH_INSERT(buf_page_t, hash, buf_pool->page_hash,fold, &block->page);
    if (zip_size) {
        page_zip_set_size(&block->page.zip, zip_size);
    }
}

函数buf_page_init的更多相关文章

  1. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  5. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  6. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  7. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  8. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  9. C++中的时间函数

    C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...

随机推荐

  1. ORA-06550:line 1,column 7;PLS-00201:indentifer '存储过程' must be declared;...PL/SQL Statement ignored 问题

    前段时间由于修改SMES系统,出现了一个问题. ORA-06550:line 1,column 7;PLS-00201:indentifer '存储过程' must be declared;...PL ...

  2. html+css学习笔记 4[定位]

    如何让图1中的div2移动到如图2上的位置: 思路:哪些css命令能够影响盒子显示的位置呢? relative相对定位/定位偏移量 position:relative;  相对定位         a ...

  3. java 使用 comet4j 主动向客户端推送信息 简单例子

    [背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...

  4. 【UVA】【11762】Race to 1(得到1)

    数学期望/马尔可夫过程 DP/记忆化搜索 刘汝佳老师白书上的例题…… //UVA 11762 #include<vector> #include<cstdio> #includ ...

  5. git如何ignore

    今天新建了一个项目传到git上,但是每次编译都会有一些无用的文件生成,于是就编写了ignore.但是发现无用.因为你的文件已经上传到服务器了,再编写ignore就无用了,ignore的适用是文件没上传 ...

  6. [转载]ASP.NET对路径"xxxxx"的访问被拒绝的解决方法小结

    异常详细信息: System.UnauthorizedAccessException: 对路径“D:/temp1/MyTest.txt”的访问被拒绝     在windows 2003下,在运行web ...

  7. 高性能网络编程1----accept建立连接

    转 http://taohui.org.cn/tcpperf1.html  陶辉 taohui.org.cn 回到应用层,往往只需要调用类似于accept的API就可以建立TCP连接.建立连接的流程大 ...

  8. PHP之implode与explode函数讲解

    implode (PHP 4, PHP 5) implode — 将一个一维数组的值转化为字符串 说明¶ string implode ( string $glue , array $pieces ) ...

  9. Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法

    一.类的定义 一个全面的类定义是比较复杂的,  定义如下:

  10. JS常见排序算法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...