• Inaam Rana's avatar
    Bug#13537504 VALGRIND: COND. JUMP/MOVE DEPENDS ON UNINITIALISED VALUES · df2da7d7
    Inaam Rana authored
    IN OS_THREAD_EQ
    
    rb://977
    approved by: Marko Makela
    
    rw_lock::writer_thread field contains the thread id of current x-holder
    or wait-x thread. This field is un-initialized at lock creation and is
    written to for the first time when an attempt is made to x-lock.
    
    Current code considers ::writer_thread as valid memory region only when
    the lock is held in x-mode (or there is an x-waiter). This is an
    overkill and it generates valgrind warnings.
    
    The fix is to consider ::writer_thread as valid memory region once it
    has been written to.
    
    Reasoning:
    ==========
    The ::writer_thread can be safely considered valid because:
    
    * We only ever do comparison with current calling threads id.
    * We only ever do comparison when ::recursive flag is set
    * We always unset ::recursive flag in x-unlock
    * Same thread cannot be unlocking and attempting to lock at the same
    time
    * thread_id recycling is not an issue because before an id is recycled
    the thread must leave innodb meaning it must release all locks meaning
    it must unset ::recursive flag.
    df2da7d7
sync0rw.ic 19 KB