Loading sql/ha_ndbcluster.cc +19 −9 Original line number Diff line number Diff line Loading @@ -6831,7 +6831,7 @@ static int ndbcluster_end(handlerton *hton, ha_panic_function type) fprintf(stderr, "NDB: table share %s with use_count %d not freed\n", share->key, share->use_count); #endif real_free_share(&share); ndbcluster_real_free_share(&share); } pthread_mutex_unlock(&ndbcluster_mutex); } Loading Loading @@ -7443,14 +7443,20 @@ int handle_trailing_share(NDB_SHARE *share) bzero((char*) &table_list,sizeof(table_list)); table_list.db= share->db; table_list.alias= table_list.table_name= share->table_name; safe_mutex_assert_owner(&LOCK_open); close_cached_tables(thd, 0, &table_list, TRUE); pthread_mutex_lock(&ndbcluster_mutex); if (!--share->use_count) { DBUG_PRINT("info", ("NDB_SHARE: close_cashed_tables %s freed share.", share->key)); real_free_share(&share); if (ndb_extra_logging) sql_print_information("NDB_SHARE: trailing share %s(connect_count: %u) " "released by close_cached_tables at " "connect_count: %u", share->key, share->connect_count, g_ndb_cluster_connection->get_connect_count()); ndbcluster_real_free_share(&share); DBUG_RETURN(0); } Loading @@ -7460,10 +7466,14 @@ int handle_trailing_share(NDB_SHARE *share) */ if (share->state != NSS_DROPPED && !--share->use_count) { DBUG_PRINT("info", ("NDB_SHARE: %s already exists, " "use_count=%d state != NSS_DROPPED.", share->key, share->use_count)); real_free_share(&share); if (ndb_extra_logging) sql_print_information("NDB_SHARE: trailing share %s(connect_count: %u) " "released after NSS_DROPPED check " "at connect_count: %u", share->key, share->connect_count, g_ndb_cluster_connection->get_connect_count()); ndbcluster_real_free_share(&share); DBUG_RETURN(0); } DBUG_PRINT("error", ("NDB_SHARE: %s already exists use_count=%d.", Loading Loading @@ -7729,7 +7739,7 @@ void ndbcluster_free_share(NDB_SHARE **share, bool have_lock) (*share)->util_lock= 0; if (!--(*share)->use_count) { real_free_share(share); ndbcluster_real_free_share(share); } else { Loading sql/ha_ndbcluster.h +1 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ typedef struct st_ndbcluster_share { char *table_name; Ndb::TupleIdRange tuple_id_range; #ifdef HAVE_NDB_BINLOG uint32 connect_count; uint32 flags; NdbEventOperation *op; NdbEventOperation *op_old; // for rename table Loading sql/ha_ndbcluster_binlog.cc +14 −3 Original line number Diff line number Diff line Loading @@ -362,6 +362,8 @@ void ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *_table) int do_event_op= ndb_binlog_running; DBUG_ENTER("ndbcluster_binlog_init_share"); share->connect_count= g_ndb_cluster_connection->get_connect_count(); share->op= 0; share->table= 0; Loading Loading @@ -605,7 +607,7 @@ static int ndbcluster_binlog_end(THD *thd) ("table->s->db.table_name: %s.%s", share->table->s->db.str, share->table->s->table_name.str)); if (share->state != NSS_DROPPED && !--share->use_count) real_free_share(&share); ndbcluster_real_free_share(&share); else { DBUG_PRINT("share", Loading Loading @@ -2443,11 +2445,20 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key, pthread_mutex_unlock(&ndbcluster_mutex); DBUG_RETURN(1); } if (share->connect_count != g_ndb_cluster_connection->get_connect_count()) { handle_trailing_share(share); share= NULL; } } /* Create share which is needed to hold replication information */ if (!(share= get_share(key, 0, TRUE, TRUE))) if (share) { ++share->use_count; } else if (!(share= get_share(key, 0, TRUE, TRUE))) { sql_print_error("NDB Binlog: " "allocating table share for %s failed", key); Loading sql/ha_ndbcluster_binlog.h +0 −5 Original line number Diff line number Diff line Loading @@ -208,11 +208,6 @@ inline void free_share(NDB_SHARE **share, bool have_lock= FALSE) ndbcluster_free_share(share, have_lock); } inline void real_free_share(NDB_SHARE **share) { ndbcluster_real_free_share(share); } inline Thd_ndb * get_thd_ndb(THD *thd) { return (Thd_ndb *) thd->ha_data[ndbcluster_hton->slot]; } Loading Loading
sql/ha_ndbcluster.cc +19 −9 Original line number Diff line number Diff line Loading @@ -6831,7 +6831,7 @@ static int ndbcluster_end(handlerton *hton, ha_panic_function type) fprintf(stderr, "NDB: table share %s with use_count %d not freed\n", share->key, share->use_count); #endif real_free_share(&share); ndbcluster_real_free_share(&share); } pthread_mutex_unlock(&ndbcluster_mutex); } Loading Loading @@ -7443,14 +7443,20 @@ int handle_trailing_share(NDB_SHARE *share) bzero((char*) &table_list,sizeof(table_list)); table_list.db= share->db; table_list.alias= table_list.table_name= share->table_name; safe_mutex_assert_owner(&LOCK_open); close_cached_tables(thd, 0, &table_list, TRUE); pthread_mutex_lock(&ndbcluster_mutex); if (!--share->use_count) { DBUG_PRINT("info", ("NDB_SHARE: close_cashed_tables %s freed share.", share->key)); real_free_share(&share); if (ndb_extra_logging) sql_print_information("NDB_SHARE: trailing share %s(connect_count: %u) " "released by close_cached_tables at " "connect_count: %u", share->key, share->connect_count, g_ndb_cluster_connection->get_connect_count()); ndbcluster_real_free_share(&share); DBUG_RETURN(0); } Loading @@ -7460,10 +7466,14 @@ int handle_trailing_share(NDB_SHARE *share) */ if (share->state != NSS_DROPPED && !--share->use_count) { DBUG_PRINT("info", ("NDB_SHARE: %s already exists, " "use_count=%d state != NSS_DROPPED.", share->key, share->use_count)); real_free_share(&share); if (ndb_extra_logging) sql_print_information("NDB_SHARE: trailing share %s(connect_count: %u) " "released after NSS_DROPPED check " "at connect_count: %u", share->key, share->connect_count, g_ndb_cluster_connection->get_connect_count()); ndbcluster_real_free_share(&share); DBUG_RETURN(0); } DBUG_PRINT("error", ("NDB_SHARE: %s already exists use_count=%d.", Loading Loading @@ -7729,7 +7739,7 @@ void ndbcluster_free_share(NDB_SHARE **share, bool have_lock) (*share)->util_lock= 0; if (!--(*share)->use_count) { real_free_share(share); ndbcluster_real_free_share(share); } else { Loading
sql/ha_ndbcluster.h +1 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ typedef struct st_ndbcluster_share { char *table_name; Ndb::TupleIdRange tuple_id_range; #ifdef HAVE_NDB_BINLOG uint32 connect_count; uint32 flags; NdbEventOperation *op; NdbEventOperation *op_old; // for rename table Loading
sql/ha_ndbcluster_binlog.cc +14 −3 Original line number Diff line number Diff line Loading @@ -362,6 +362,8 @@ void ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *_table) int do_event_op= ndb_binlog_running; DBUG_ENTER("ndbcluster_binlog_init_share"); share->connect_count= g_ndb_cluster_connection->get_connect_count(); share->op= 0; share->table= 0; Loading Loading @@ -605,7 +607,7 @@ static int ndbcluster_binlog_end(THD *thd) ("table->s->db.table_name: %s.%s", share->table->s->db.str, share->table->s->table_name.str)); if (share->state != NSS_DROPPED && !--share->use_count) real_free_share(&share); ndbcluster_real_free_share(&share); else { DBUG_PRINT("share", Loading Loading @@ -2443,11 +2445,20 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key, pthread_mutex_unlock(&ndbcluster_mutex); DBUG_RETURN(1); } if (share->connect_count != g_ndb_cluster_connection->get_connect_count()) { handle_trailing_share(share); share= NULL; } } /* Create share which is needed to hold replication information */ if (!(share= get_share(key, 0, TRUE, TRUE))) if (share) { ++share->use_count; } else if (!(share= get_share(key, 0, TRUE, TRUE))) { sql_print_error("NDB Binlog: " "allocating table share for %s failed", key); Loading
sql/ha_ndbcluster_binlog.h +0 −5 Original line number Diff line number Diff line Loading @@ -208,11 +208,6 @@ inline void free_share(NDB_SHARE **share, bool have_lock= FALSE) ndbcluster_free_share(share, have_lock); } inline void real_free_share(NDB_SHARE **share) { ndbcluster_real_free_share(share); } inline Thd_ndb * get_thd_ndb(THD *thd) { return (Thd_ndb *) thd->ha_data[ndbcluster_hton->slot]; } Loading