~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_base.cc

  • Committer: Brian Aker
  • Date: 2010-08-19 06:39:23 UTC
  • mfrom: (1718.1.2 drizzle)
  • Revision ID: brian@tangent.org-20100819063923-2e4ydo8uyby2fj14
Rollup merge for boost::mutex

Show diffs side-by-side

added added

removed removed

Lines of Context:
553
553
 
554
554
  safe_mutex_assert_not_owner(LOCK_open.native_handle());
555
555
 
556
 
  LOCK_open.lock(); /* Close all open tables on Session */
 
556
  boost::mutex::scoped_lock scoped_lock(LOCK_open); /* Close all open tables on Session */
557
557
 
558
558
  while (open_tables)
559
559
  {
566
566
    /* Tell threads waiting for refresh that something has happened */
567
567
    broadcast_refresh();
568
568
  }
569
 
 
570
 
  LOCK_open.unlock();
571
569
}
572
570
 
573
571
/*
922
920
  }
923
921
  else
924
922
  {
925
 
    LOCK_open.lock(); /* Close and drop a table (AUX routine) */
 
923
    boost::mutex::scoped_lock scoped_lock(LOCK_open); /* Close and drop a table (AUX routine) */
926
924
    /*
927
925
      unlink_open_table() also tells threads waiting for refresh or close
928
926
      that something has happened.
929
927
    */
930
928
    unlink_open_table(table);
931
929
    quick_rm_table(*this, identifier);
932
 
    LOCK_open.unlock();
933
930
  }
934
931
}
935
932
 
1126
1123
{
1127
1124
  const TableIdentifier::Key &key(identifier.getKey());
1128
1125
 
1129
 
  LOCK_open.lock(); /* Obtain a name lock even though table is not in cache (like for create table)  */
 
1126
  boost::mutex::scoped_lock scope_lock(LOCK_open); /* Obtain a name lock even though table is not in cache (like for create table)  */
1130
1127
 
1131
1128
  TableOpenCache::iterator iter;
1132
1129
 
1134
1131
 
1135
1132
  if (iter != get_open_cache().end())
1136
1133
  {
1137
 
    LOCK_open.unlock();
1138
1134
    *table= 0;
1139
1135
    return false;
1140
1136
  }
1141
1137
 
1142
1138
  if (not (*table= table_cache_insert_placeholder(identifier.getSchemaName().c_str(), identifier.getTableName().c_str())))
1143
1139
  {
1144
 
    LOCK_open.unlock();
1145
1140
    return true;
1146
1141
  }
1147
1142
  (*table)->open_placeholder= true;
1148
1143
  (*table)->setNext(open_tables);
1149
1144
  open_tables= *table;
1150
 
  LOCK_open.unlock();
1151
1145
 
1152
1146
  return false;
1153
1147
}
1860
1854
  bool result;
1861
1855
 
1862
1856
  session->set_proc_info("Waiting for tables");
1863
 
  LOCK_open.lock(); /* Lock for all tables to be refreshed */
1864
 
  while (!session->killed)
1865
 
  {
1866
 
    session->some_tables_deleted= false;
1867
 
    session->close_old_data_files(false, dropping_tables != 0);
1868
 
    if (!table_is_used(session->open_tables, 1))
1869
 
      break;
1870
 
    (void) pthread_cond_wait(COND_refresh.native_handle(),LOCK_open.native_handle());
1871
 
  }
1872
 
  if (session->killed)
1873
 
    result= true;                                       // aborted
1874
 
  else
1875
 
  {
1876
 
    /* Now we can open all tables without any interference */
1877
 
    session->set_proc_info("Reopen tables");
1878
 
    session->version= refresh_version;
1879
 
    result= session->reopen_tables(false, false);
1880
 
  }
1881
 
  LOCK_open.unlock();
 
1857
  {
 
1858
    boost::mutex::scoped_lock lock(LOCK_open);
 
1859
    while (!session->killed)
 
1860
    {
 
1861
      session->some_tables_deleted= false;
 
1862
      session->close_old_data_files(false, dropping_tables != 0);
 
1863
      if (!table_is_used(session->open_tables, 1))
 
1864
        break;
 
1865
      COND_refresh.wait(lock);
 
1866
    }
 
1867
    if (session->killed)
 
1868
      result= true;                                     // aborted
 
1869
    else
 
1870
    {
 
1871
      /* Now we can open all tables without any interference */
 
1872
      session->set_proc_info("Reopen tables");
 
1873
      session->version= refresh_version;
 
1874
      result= session->reopen_tables(false, false);
 
1875
    }
 
1876
  }
1882
1877
  session->set_proc_info(0);
1883
1878
 
1884
1879
  return result;