~vjsamuel/drizzle/rplugin-auth-file

« back to all changes in this revision

Viewing changes to plugin/heap/hp_create.cc

  • Committer: Brian Aker
  • Date: 2010-08-11 21:21:09 UTC
  • mfrom: (1697.2.5 staging)
  • Revision ID: brian@gaz-20100811212109-nsfakn1qtsvsgiax
Update heap (mostly C++).

Show diffs side-by-side

added added

removed removed

Lines of Context:
251
251
          keyinfo->get_key_length= hp_rb_key_length;
252
252
      }
253
253
    }
254
 
    share= NULL;
255
 
    if (!(share= (HP_SHARE*) malloc(sizeof(HP_SHARE))))
256
 
      goto err;
257
 
 
258
 
    memset(share, 0, sizeof(HP_SHARE));
259
 
 
260
 
    if (keys && !(share->keydef= (HP_KEYDEF*) malloc(keys*sizeof(HP_KEYDEF))))
261
 
      goto err;
262
 
 
263
 
    memset(share->keydef, 0, keys*sizeof(HP_KEYDEF));
264
 
 
265
 
    if (keys && !(share->keydef->seg= (HA_KEYSEG*) malloc(key_segs*sizeof(HA_KEYSEG))))
266
 
      goto err;
267
 
    if (!(share->column_defs= (HP_COLUMNDEF*)
268
 
          malloc(columns*sizeof(HP_COLUMNDEF))))
269
 
      goto err;
270
 
 
271
 
    memset(share->column_defs, 0, columns*sizeof(HP_COLUMNDEF));
 
254
    share= new HP_SHARE;
 
255
 
 
256
    if (keys && !(share->keydef= new HP_KEYDEF[keys]))
 
257
      goto err;
 
258
    if (keys && !(share->keydef->seg= new HA_KEYSEG[key_segs]))
 
259
      goto err;
 
260
    if (!(share->column_defs= new HP_COLUMNDEF[columns]))
 
261
      goto err;
272
262
 
273
263
    /*
274
264
       Max_records is used for estimating block sizes and for enforcement.
280
270
    max_records = ((max_records && max_records < max_rows_for_stated_memory) ?
281
271
                      max_records : max_rows_for_stated_memory);
282
272
 
 
273
#if 0
283
274
    memcpy(share->column_defs, columndef, (size_t) (sizeof(columndef[0]) * columns));
 
275
#endif
284
276
 
285
277
    share->key_stat_version= 1;
286
278
    keyseg= keys ? share->keydef->seg : NULL;
370
362
  return(0);
371
363
 
372
364
err:
373
 
  if(share && share->keydef && share->keydef->seg)
374
 
    free(share->keydef->seg);
375
 
  if(share && share->keydef)
376
 
    free(share->keydef);
377
 
  if(share && share->column_defs)
378
 
    free(share->column_defs);
379
 
  if(share)
380
 
    free(share);
381
 
  if (!create_info->internal_table)
 
365
  if (share && share->keydef && share->keydef->seg)
 
366
    delete [] share->keydef->seg;
 
367
  if (share && share->keydef)
 
368
    delete [] share->keydef;
 
369
  if (share && share->column_defs)
 
370
    delete [] share->column_defs;
 
371
  if (share)
 
372
    delete share;
 
373
  if (not create_info->internal_table)
382
374
    THR_LOCK_heap.unlock();
383
375
  return(1);
384
376
} /* heap_create */
449
441
}
450
442
 
451
443
 
452
 
void heap_drop_table(HP_INFO *info)
453
 
{
454
 
  THR_LOCK_heap.lock();
455
 
  heap_try_free(info->s);
456
 
  THR_LOCK_heap.unlock();
457
 
  return;
458
 
}
459
 
 
460
 
 
461
444
void hp_free(HP_SHARE *share)
462
445
{
463
446
  heap_share_list.remove(share);        /* If not internal table */
465
448
  share->lock.deinit();
466
449
  pthread_mutex_destroy(&share->intern_lock);
467
450
  if (share->keydef && share->keydef->seg)
468
 
    free(share->keydef->seg);
 
451
    delete [] share->keydef->seg;
469
452
  if (share->keydef)
470
 
    free(share->keydef);
471
 
  free(share->column_defs);
 
453
    delete [] share->keydef;
 
454
  delete [] share->column_defs;
472
455
  free((unsigned char*) share->name);
473
 
  free((unsigned char*) share);
474
 
  return;
 
456
  delete share;
475
457
}