Commit 61ff7d38 authored by stewart@mysql.com's avatar stewart@mysql.com

BUG#10948 NDB Replication: Race condition with ALTER/DROP table

BUG#9826  Server crash on schema change ("drop table", "alter table") with NDB

See note on 10948 for detailed explanation.

struct a { void* a; long long b[1]; };

on PPC32 (and 32bit pa risc): 16
on x86: 12

so a malloc(sizeof(void*)+extra_bits) is wrong.

Assuming that the long long is 64 bit aligned as non-aligned 64bit accesses
are rather expensive on ppc.

Thanks to paulus for doing the PPC port of valgrind.
Without which I would no doubt still be trying to find this.
parent 7a1282b3
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
Ndb_local_table_info * Ndb_local_table_info *
Ndb_local_table_info::create(NdbTableImpl *table_impl, Uint32 sz) Ndb_local_table_info::create(NdbTableImpl *table_impl, Uint32 sz)
{ {
Uint32 tot_size= sizeof(NdbTableImpl *) + ((sz+7)>>3)<<3; // round to Uint64 Uint32 tot_size= sizeof(Ndb_local_table_info) - sizeof(Uint64)
+ ((sz+7) & ~7); // round to Uint64
void *data= malloc(tot_size); void *data= malloc(tot_size);
if (data == 0) if (data == 0)
return 0; return 0;
......
...@@ -33,7 +33,7 @@ public: ...@@ -33,7 +33,7 @@ public:
static Ndb_local_table_info *create(NdbTableImpl *table_impl, Uint32 sz=0); static Ndb_local_table_info *create(NdbTableImpl *table_impl, Uint32 sz=0);
static void destroy(Ndb_local_table_info *); static void destroy(Ndb_local_table_info *);
NdbTableImpl *m_table_impl; NdbTableImpl *m_table_impl;
Uint64 m_local_data[1]; Uint64 m_local_data[1]; // Must be last member. Used to access extra space.
private: private:
Ndb_local_table_info(NdbTableImpl *table_impl); Ndb_local_table_info(NdbTableImpl *table_impl);
~Ndb_local_table_info(); ~Ndb_local_table_info();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment