Пример #1
0
void destroy_pool(pool *p) {
  if (p == NULL) {
    return;
  }

  pr_alarms_block();

  if (p->parent) {
    if (p->parent->sub_pools == p) {
      p->parent->sub_pools = p->sub_next;
    }

    if (p->sub_prev) {
      p->sub_prev->sub_next = p->sub_next;
    }

    if (p->sub_next) {
      p->sub_next->sub_prev = p->sub_prev;
    }
  }

  clear_pool(p);
  free_blocks(p->first, p->tag);

  pr_alarms_unblock();

#ifdef PR_DEVEL_NO_POOL_FREELIST
  /* If configured explicitly to do so, call free(3) on the freelist after
   * a pool is destroyed.  This can be useful for tracking down use-after-free
   * and other memory issues using libraries such as dmalloc.
   */
  pool_release_free_block_list();
#endif /* PR_EVEL_NO_POOL_FREELIST */
}
Пример #2
0
int main(int argc, char *argv[])
{
	int retval = EXIT_FAILURE;
	int opt;
	int fd=-1;
	int val=0;
	int r;

	while ((opt = getopt(argc, argv, "h")) != -1) {
		switch (opt) {
		case 'h':
			usage();
			exit(EXIT_SUCCESS);
			break;
		default: /* '?' */
			usage();
			exit(EXIT_FAILURE);
		}
	}

	if (argc - optind < 1) {
		fprintf(stderr, "Missing action\n");
		usage();
		exit(EXIT_FAILURE);
	}
	const char *action = argv[optind];
	int action_argc = argc - optind;
	char **action_argv = &argv[optind];

	fd = open("/dev/urandom", O_RDWR);
	if (fd == -1) {
		perror("Failed to open /dev/urandom");
		exit(EXIT_FAILURE);
	}

	if (strcmp(action, "get_entropy_cnt") == 0) {
		retval = get_entropy_cnt(fd, action_argc, action_argv);
	} else if (strcmp(action, "add_entropy_cnt") == 0) {
		retval = add_entropy_cnt(fd, action_argc, action_argv);
	} else if (strcmp(action, "add_entropy") == 0) {
		retval = add_entropy(fd, action_argc, action_argv);
	} else if (strcmp(action, "add_random") == 0) {
		retval = add_random(fd, action_argc, action_argv);
	} else if (strcmp(action, "clear_pool") == 0) {
		retval = clear_pool(fd, action_argc, action_argv);
	} else {
		fprintf(stderr, "Unknown action: %s\n", action);
		usage();
		retval = EXIT_FAILURE;
	}

	close(fd);
	return retval;
}
Пример #3
0
void destroy_pool(pool *p) {
  if (p == NULL)
    return;

  pr_alarms_block();

  if (p->parent) {
    if (p->parent->sub_pools == p)
      p->parent->sub_pools = p->sub_next;

    if (p->sub_prev)
      p->sub_prev->sub_next = p->sub_next;

    if (p->sub_next)
      p->sub_next->sub_prev = p->sub_prev;
  }
  clear_pool(p);
  free_blocks(p->first, p->tag);

  pr_alarms_unblock();
}
Пример #4
0
void test(void) {

  card_t pool_cards[POOL_SIZE];
  card_t* pool[POOL_SIZE];
  card_t pool_cards2[POOL_SIZE];
  card_t* pool2[POOL_SIZE];
  card_t** compare_result;
  int i, j;
  byte_t random_size;

  printf("\nresolve tests:\n\n");

  printf("\nrandom pools:\n");

  for (i = 0; i < CASES_COUNT; ++i) {
    clear_pool(pool);
    randomize_pool(pool, pool_cards);
    printf("pool: "); print_pool(pool, POOL_SIZE);
    resolve_pool(pool, POOL_SIZE);
  }

  printf("\npre-defined pools:\n\n");

  for (i = 0; i < (sizeof(resolve_data)/(sizeof(char*))) / POOL_SIZE; i++) {
   for (j = 0; j < POOL_SIZE; ++j) {
      card_fill(pool_cards[j], resolve_data[i][j]);
      pool[j] = &pool_cards[j];
    }
    printf("pool: "); print_pool(pool, POOL_SIZE);
    sort_by_rank(pool, POOL_SIZE);
    printf(" sorted: "); print_pool(pool, POOL_SIZE);
    resolve_pool(pool, POOL_SIZE);
  }

  printf("\ncomparison tests:\n\n");

  for (i = 0; i < CASES_COUNT; ++i) {
    clear_pool(pool);
    randomize_pool(pool, pool_cards);
    printf("pool1: "); print_pool(pool, POOL_SIZE);
    resolve_pool(pool, POOL_SIZE);
    clear_pool(pool2);
    randomize_pool(pool2, pool_cards2);
    printf("pool2: "); print_pool(pool2, POOL_SIZE);
    resolve_pool(pool2, POOL_SIZE);

    compare_result = pok_compare(pool, pool2);
    if (compare_result == pool)
      printf("pool 1 is stronger\n");
    else if (compare_result == pool2)
      printf("pool 2 is stronger\n");
    else {
      printf("tie!\n");
    }
  }

  printf("\nincomplete pools:\n\n");

  for (i = 0; i < CASES_COUNT; ++i) {
    random_size = rand() % POOL_SIZE + 1;
    clear_pool(pool);
    randomize_pool(pool, pool_cards);
    printf("pool: "); print_pool(pool, random_size);
    resolve_pool(pool, random_size);
  }

  /*while(1) {
    clear_pool(pool);
    randomize_pool(pool, pool_cards);
    result = pok_resolve(pool);
    sort_by_rank(pool);
    if (result.kind == STRAIGHTF) {
      print_pool(pool, POOL_SIZE);
      resolve_pool(pool);
    }
  }*/

}
static void clear_queue(struct interrupt_queue *_q)
{
   _q->first = NULL;
   clear_pool(&_q->pool);
}
Пример #6
0
static void clear_queue(void)
{
   q.first = NULL;
   clear_pool(&q.pool);
}
Пример #7
0
static void clear_queue(usf_state_t * state)
{
    state->q.first = NULL;
    clear_pool(&state->q.pool);
}