From: Marc Alff Date: August 12 2010 10:21am Subject: bzr commit into mysql-trunk-bugfixing branch (marc.alff:3197) List-Archive: http://lists.mysql.com/commits/115560 Message-Id: <201008121023.o7C3MsMS004257@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2943446619413847151==" --===============2943446619413847151== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/malff/BZR_TREE/mysql-trunk-bugfixing-merge/ based on revid:jonathan.perkin@stripped 3197 Marc Alff 2010-08-12 [merge] Merge mysql-5.5-bugfixing --> mysql-trunk-bugfixing modified: storage/perfschema/pfs.cc storage/perfschema/pfs_events_waits.cc storage/perfschema/pfs_events_waits.h storage/perfschema/table_events_waits.cc === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2010-07-23 17:08:41 +0000 +++ b/storage/perfschema/pfs.cc 2010-08-12 10:21:22 +0000 @@ -1171,7 +1171,6 @@ get_thread_mutex_locker_v1(PSI_mutex_loc pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_mutex= pfs_mutex; pfs_locker->m_waits_current.m_thread= pfs_thread; @@ -1225,7 +1224,6 @@ get_thread_rwlock_locker_v1(PSI_rwlock_l pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_rwlock= pfs_rwlock; pfs_locker->m_waits_current.m_thread= pfs_thread; @@ -1292,7 +1290,6 @@ get_thread_cond_locker_v1(PSI_cond_locke pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_cond= pfs_cond; pfs_locker->m_waits_current.m_thread= pfs_thread; @@ -1359,7 +1356,6 @@ get_thread_table_locker_v1(PSI_table_loc pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_table= pfs_table; pfs_locker->m_waits_current.m_thread= pfs_thread; @@ -1423,7 +1419,6 @@ get_thread_file_name_locker_v1(PSI_file_ pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_file= pfs_file; pfs_locker->m_waits_current.m_thread= pfs_thread; @@ -1483,7 +1478,6 @@ get_thread_file_stream_locker_v1(PSI_fil pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_file= pfs_file; pfs_locker->m_waits_current.m_thread= pfs_thread; @@ -1560,7 +1554,6 @@ get_thread_file_descriptor_locker_v1(PSI pfs_locker->m_waits_current.m_nesting_event_id= parent_locker->m_waits_current.m_event_id; } - pfs_locker->m_waits_current.m_wait_class= NO_WAIT_CLASS; pfs_locker->m_target.m_file= pfs_file; pfs_locker->m_waits_current.m_thread= pfs_thread; === modified file 'storage/perfschema/pfs_events_waits.cc' --- a/storage/perfschema/pfs_events_waits.cc 2010-07-23 20:59:42 +0000 +++ b/storage/perfschema/pfs_events_waits.cc 2010-08-12 10:21:22 +0000 @@ -80,25 +80,10 @@ void cleanup_events_waits_history_long(v events_waits_history_long_array= NULL; } -static void copy_events_waits(PFS_events_waits *dest, - const PFS_events_waits *source) +static inline void copy_events_waits(PFS_events_waits *dest, + const PFS_events_waits *source) { - /* m_wait_class must be the first member of PFS_events_waits. */ - compile_time_assert(offsetof(PFS_events_waits, m_wait_class) == 0); - - char* dest_body= (reinterpret_cast (dest)) + sizeof(events_waits_class); - const char* source_body= (reinterpret_cast (source)) - + sizeof(events_waits_class); - - /* See comments in table_events_waits_common::make_row(). */ - - /* Signal readers they are about to read garbage ... */ - dest->m_wait_class= NO_WAIT_CLASS; - /* ... that this can generate. */ - memcpy(dest_body, source_body, - sizeof(PFS_events_waits) - sizeof(events_waits_class)); - /* Signal readers the record is now clean again. */ - dest->m_wait_class= source->m_wait_class; + memcpy(dest, source, sizeof(PFS_events_waits)); } /** @@ -116,9 +101,7 @@ void insert_events_waits_history(PFS_thr causing a potential race condition. We are not testing for this and insert a possibly empty record, to make this thread (the writer) faster. - This is ok, the truncated data will have - wait->m_wait_class == NO_WAIT_CLASS, - which readers of m_waits_history will filter out. + This is ok, the readers of m_waits_history will filter this out. */ copy_events_waits(&thread->m_waits_history[index], wait); === modified file 'storage/perfschema/pfs_events_waits.h' --- a/storage/perfschema/pfs_events_waits.h 2010-07-23 17:08:41 +0000 +++ b/storage/perfschema/pfs_events_waits.h 2010-08-12 10:21:22 +0000 @@ -97,7 +97,7 @@ struct PFS_events_waits - TRUNCATE EVENTS_WAITS_HISTORY - TRUNCATE EVENTS_WAITS_HISTORY_LONG */ - volatile events_waits_class m_wait_class; + events_waits_class m_wait_class; /** Executing thread. */ PFS_thread *m_thread; /** Instrument metadata. */ === modified file 'storage/perfschema/table_events_waits.cc' --- a/storage/perfschema/table_events_waits.cc 2010-07-23 17:08:41 +0000 +++ b/storage/perfschema/table_events_waits.cc 2010-08-12 10:21:22 +0000 @@ -217,16 +217,8 @@ void table_events_waits_common::make_row or 8 atomics per recorded event. The problem is that we record a *lot* of events ... - Instead, a *dirty* marking is done using m_wait_class. - Using m_wait_class alone does not guarantee anything, it just filters - out most of the bad data. - This is acceptable because this code is garbage-proof, - and won't crash on bad data, only display it, - very rarely (which is accepted). - - If a bad record is displayed, it's a very transient failure: - the next select * from EVENTS_WAITS_CURRENT/_HISTORY/_HISTORY_LONG will - show clean data again. + This code is prepared to accept *dirty* records, + and sanitizes all the data before returning a row. */ m_row.m_thread_internal_id= safe_thread->m_thread_internal_id; --===============2943446619413847151== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///Users/malff/BZR_TREE/mysql-trunk-bugfixing-\ # merge/ # testament_sha1: fa538587b0a1e5566b3fbb862a649daa1589aac9 # timestamp: 2010-08-12 04:21:54 -0600 # source_branch: file:///Users/malff/BZR_TREE/mysql-5.5-bugfixing/ # base_revision_id: jonathan.perkin@stripped\ # 0g0ee595dxxqbkcz # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWSwPOfYABybfgEAQeHf//3MC XAC////wYAp/HiAAAAdKoNAAAAAABzAJgBMAAJgACYAAlTJT9QwqfqYU0BkBpkAABk0BzAJgBMAA JgACYAA09SJiak0P1T1ADQAyAGhoABzAJgBMAAJgACYAAkiCZAmmQ0AlP0RqMCaBqZoj0jq7+tpl uOpzJmMBa7+P1pG0Z1A5HM5xphqMDlw4SnZcReFt888WEUnZjGLzwva6MqRsoySK86sRvYay2s5F CShUnEjdLNBEGGG+U9Ps304gfNEshgE6QAgZMMIGY9fJksd9zXKSGBWG1RSFYiM5rliBIkOTjKES qRrERYTvurSd1avSUlSk70CnJ4QdBMeD0ICzrSWN1W1tzCHg7532RB9bfr9yM8KEGwrDtzAspYpf 3IDCLx9v5PARKkPBEAgZRjWMLb+pq2rdRcxzRf8YZqzA5nGrMMzUlPbMtp8EBSrpAX8+HHKOHaXp KSh1m3WOazAMwGDQGA/pCR4HDhzHD37i44LwAvQ2HnqMCxKbi8couCQfev31p2uqU2pINCwQcUkh hZC4gNbEHdw61ZmZm2KYBewXslyYSwYjuHSYGY7MgUGQke2pEpGroQEwFBA6BMeQwK8+3Q7SIBKq uCQViVuuUbPQ9heRAkvBjbtYkhA6qtgCvQigKaLImoxI71oxM7pyhtDyXJX70GWj0YWBRiEHaEKA ZUTGhwLCYCoyEh90QLCQKPAZdw3dCCqArtxBDBmTLCv6xQK9ILGBRBOG0YxGLjW26t/LWyxymAzE HB1EUgTkAlMhIBRP8Ng5IwnAdILuG8wGLMjaYBI2Ey1iiisayj74SD1mSIXNx2LRsohoA1Dd5gLi U2jl5r9z2ArdFhZrrF883lAFKzPghAOAsBkg0HH32UfpEFXeCqYUkCdp4kINx4wIX3IeZuuLdu2j AKBUYO7ZN5EZFNMFGtY0iRNlIxrUflzobElFCmV3GEgVxvLuQKKtCbzwaMSOTwUCek8qLFWDmBCe mBkROBYxbMjEuIQeCfaDY7GjCwIGQsZQvLeGl5eZHNdVba2zdvjDLKLkwFBbVYyQSUywIasUbfKJ DQgTIUnEgMTHyk4ChaGJcQi7bttwbi2RaMVEdjEyIFcAxmTwsPMlBobFaO+I7VsRzMKGREN5y010 bBINI8TI7i/2beE2pEFeqWWDWwymafStkq1H3EbITOVvGaQUIXCasuRtVvMc1PPmSLMCxsjfEa02 nS4yTHK/P7th0HM4FrUay0fKFhQYdlRITL90eDRjavCgDpGTARUnUELBpuhWI0bJskNdRkKZuKDF sMUYfir0VPwSCACnUlV7kxxkEYK1xo59qJ98yAGFDhdI3m/dOJAtutLClpSd5F80jRqGFC8Z4OfI paoVsWBXiaqElGliequcDVxCKEEjCNU5FXDVhum+C5YOOXhGOCkbyQ8dVaITKOndhJ5C4x2AOgQu WdFxis+5MAvChGRS8cfvRQuSB4mw0HT43ksUoFhOAGu4IBbvzNsS8ctRtMjov9BWVxLqDoJkomxR 3EzcXDOOLgWJLEkIq9BgTFRqCJoVKjFvv/MRuKnM5DjAzMzHcNGBkEBhhhhgY6H7gd/idRVKCdAF pRFwwwzIYTH86w/tDrRIGl8MjQGLAX2vExJRAEydGmrklFkyh3QQGSggTPce2AHDgELARA5nkcyZ HgSkRO+APb7/KhiLE93x96SRbYeBzEYzNCaFcC/VCXwSQfphqBsNRZlTnd+P+EkkGiSLz4hBa3ic vjAifKuge41GN58T4ETV4EwiQPkHKwIBccyFj3Hfl1UBZrovUx9we1CDsSzFl5gDhzBgcCSSCJRs vQYnlqZ8JFhP4ZOEqFTgYiV8+CJm49hYR6HyzP2LS0je+ZYb7/NAzjpB9wgkkdTakkaH2hbr59V+ 6vjbg63HUsAXQtO20sv8eAXW4uwLLsThM65JFDrsBWnkSOWZMuEGAYFpTfqbDMzO/U7GO0/n5+oj xD3p9DSui9+9j8gMIfvErE5T4wHSQqG7rEldPhyC+x7CJwLMLHox1aHQbatTtnbjo58QPIDRFWZl +Qz7BK9C2BkX6FgaGJpHMkTn9eMKaIfstfGxQOO1zM4lvMlPnM3u5lj/RAOCDjp/59BEEkmBc2rz 6xc8v2YD86lfWIqMqdCZEYu6HwAX4wEsBBakEzuah4PM8+B5B6nodFXsQLChIJIERPA4KEOZSIig MeR5VHSQSBaiKDf4B7AOAj2B6Z8SK/I7iCADlZnyY4ClvkMJRgSDAh8hbyYJugI6pD0udBABfdN3 uSDgvUBbkLQ9CxXZJ3yPL4l4gY6zPQR18/wJASYA97OH7dj5pBTP7bGV8/z8zoWHUSnPimZtRJ+y 2gK9xC0M0VQbMw5cgWwV8wFb25Ob4HzXQXRC6RSD+Eg5psj9gyAwFoCYCJ7SIFA2eiB0khgLDETg PT7mqSD10ebdj0N0dhsxSSNTsbUFhAX9H8IYHAYdDA/giiXliBSHIsMA/3eRBcFifClpURUpqkGd 8hpVLBMXgmAgJiIDCxJIiJQGSwIx4biU8EA7IQMLx5nmyCZ0LYAXqnh2kgFUSxF9CFAb/Uki5Ccv AxgljoX7quzntUNm4cBgURD9APgKqc6jAwwMMSuv30qNLakF2V30p7FtDquVEeqQUBJRIoEWEFrg RZhI2PsPA4i1JerC21SoW5ztClFY3OZoopZQIyZQ4uonGLo5MmYGBhe1d+6gSaQJkhOXwAbgkFxu 0SBiowG0DASYCziArhGLDa6JB9Z/iGoYnqwcsULFqz0sYY5fFcwFIgUUgOoBHyPIKripHpvMwByg nRaAmc7t3G2hL8FO5CxGYPc3UmIVYIQOcIH6guh/PUPmkHgmWF/bM3NobBzYKxAniOJeM+MvCEqK PsAWO7IBZJw2LksBBuXOZm3k7nRiE0gvzCv6Lot+KRYZpA69gC/+LuSKcKEgWB5z7A== --===============2943446619413847151==--