Beispiel #1
0
/* Cleaning up a list with pending alarms. */
void destruction_test(void) {
    grpc_alarm alarms[5];

    grpc_alarm_list_init(gpr_time_0);
    memset(cb_called, 0, sizeof(cb_called));

    grpc_alarm_init(&alarms[0], gpr_time_from_millis(100), cb,
                    (void *)(gpr_intptr)0, gpr_time_0);
    grpc_alarm_init(&alarms[1], gpr_time_from_millis(3), cb,
                    (void *)(gpr_intptr)1, gpr_time_0);
    grpc_alarm_init(&alarms[2], gpr_time_from_millis(100), cb,
                    (void *)(gpr_intptr)2, gpr_time_0);
    grpc_alarm_init(&alarms[3], gpr_time_from_millis(3), cb,
                    (void *)(gpr_intptr)3, gpr_time_0);
    grpc_alarm_init(&alarms[4], gpr_time_from_millis(1), cb,
                    (void *)(gpr_intptr)4, gpr_time_0);
    GPR_ASSERT(1 == grpc_alarm_check(NULL, gpr_time_from_millis(2), NULL));
    GPR_ASSERT(1 == cb_called[4][1]);
    grpc_alarm_cancel(&alarms[0]);
    grpc_alarm_cancel(&alarms[3]);
    GPR_ASSERT(1 == cb_called[0][0]);
    GPR_ASSERT(1 == cb_called[3][0]);

    grpc_alarm_list_shutdown();
    GPR_ASSERT(1 == cb_called[1][0]);
    GPR_ASSERT(1 == cb_called[2][0]);
}
Beispiel #2
0
/* Cleaning up a list with pending alarms. */
void destruction_test(void) {
  grpc_alarm alarms[5];
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;

  grpc_alarm_list_init(gpr_time_0(GPR_CLOCK_REALTIME));
  memset(cb_called, 0, sizeof(cb_called));

  grpc_alarm_init(&exec_ctx, &alarms[0], tfm(100), cb, (void *)(gpr_intptr)0,
                  gpr_time_0(GPR_CLOCK_REALTIME));
  grpc_alarm_init(&exec_ctx, &alarms[1], tfm(3), cb, (void *)(gpr_intptr)1,
                  gpr_time_0(GPR_CLOCK_REALTIME));
  grpc_alarm_init(&exec_ctx, &alarms[2], tfm(100), cb, (void *)(gpr_intptr)2,
                  gpr_time_0(GPR_CLOCK_REALTIME));
  grpc_alarm_init(&exec_ctx, &alarms[3], tfm(3), cb, (void *)(gpr_intptr)3,
                  gpr_time_0(GPR_CLOCK_REALTIME));
  grpc_alarm_init(&exec_ctx, &alarms[4], tfm(1), cb, (void *)(gpr_intptr)4,
                  gpr_time_0(GPR_CLOCK_REALTIME));
  GPR_ASSERT(1 == grpc_alarm_check(&exec_ctx, tfm(2), NULL));
  grpc_exec_ctx_finish(&exec_ctx);
  GPR_ASSERT(1 == cb_called[4][1]);
  grpc_alarm_cancel(&exec_ctx, &alarms[0]);
  grpc_alarm_cancel(&exec_ctx, &alarms[3]);
  grpc_exec_ctx_finish(&exec_ctx);
  GPR_ASSERT(1 == cb_called[0][0]);
  GPR_ASSERT(1 == cb_called[3][0]);

  grpc_alarm_list_shutdown(&exec_ctx);
  grpc_exec_ctx_finish(&exec_ctx);
  GPR_ASSERT(1 == cb_called[1][0]);
  GPR_ASSERT(1 == cb_called[2][0]);
}
Beispiel #3
0
static void add_test(void) {
    gpr_timespec start = gpr_now(GPR_CLOCK_REALTIME);
    int i;
    grpc_alarm alarms[20];

    grpc_alarm_list_init(start);
    memset(cb_called, 0, sizeof(cb_called));

    /* 10 ms alarms.  will expire in the current epoch */
    for (i = 0; i < 10; i++) {
        grpc_alarm_init(&alarms[i], gpr_time_add(start, gpr_time_from_millis(10)),
                        cb, (void *)(gpr_intptr)i, start);
    }

    /* 1010 ms alarms.  will expire in the next epoch */
    for (i = 10; i < 20; i++) {
        grpc_alarm_init(&alarms[i], gpr_time_add(start, gpr_time_from_millis(1010)),
                        cb, (void *)(gpr_intptr)i, start);
    }

    /* collect alarms.  Only the first batch should be ready. */
    GPR_ASSERT(10 ==
               grpc_alarm_check(
                   NULL, gpr_time_add(start, gpr_time_from_millis(500)), NULL));
    for (i = 0; i < 20; i++) {
        GPR_ASSERT(cb_called[i][1] == (i < 10));
        GPR_ASSERT(cb_called[i][0] == 0);
    }

    GPR_ASSERT(0 ==
               grpc_alarm_check(
                   NULL, gpr_time_add(start, gpr_time_from_millis(600)), NULL));
    for (i = 0; i < 30; i++) {
        GPR_ASSERT(cb_called[i][1] == (i < 10));
        GPR_ASSERT(cb_called[i][0] == 0);
    }

    /* collect the rest of the alarms */
    GPR_ASSERT(10 ==
               grpc_alarm_check(
                   NULL, gpr_time_add(start, gpr_time_from_millis(1500)), NULL));
    for (i = 0; i < 30; i++) {
        GPR_ASSERT(cb_called[i][1] == (i < 20));
        GPR_ASSERT(cb_called[i][0] == 0);
    }

    GPR_ASSERT(0 ==
               grpc_alarm_check(
                   NULL, gpr_time_add(start, gpr_time_from_millis(1600)), NULL));
    for (i = 0; i < 30; i++) {
        GPR_ASSERT(cb_called[i][1] == (i < 20));
        GPR_ASSERT(cb_called[i][0] == 0);
    }

    grpc_alarm_list_shutdown();
}
Beispiel #4
0
void grpc_iomgr_init(void) {
  gpr_thd_id id;
  gpr_mu_init(&g_mu);
  gpr_cv_init(&g_cv);
  gpr_cv_init(&g_rcv);
  grpc_alarm_list_init(gpr_now());
  g_refs = 0;
  grpc_iomgr_platform_init();
  gpr_event_init(&g_background_callback_executor_done);
  gpr_thd_new(&id, background_callback_executor, NULL, NULL);
}
Beispiel #5
0
void grpc_iomgr_init(void) {
  gpr_thd_id id;
  gpr_mu_init(&g_mu);
  gpr_cv_init(&g_rcv);
  grpc_alarm_list_init(gpr_now());
  g_root_object.next = g_root_object.prev = &g_root_object;
  g_root_object.name = "root";
  grpc_iomgr_platform_init();
  gpr_event_init(&g_background_callback_executor_done);
  gpr_thd_new(&id, background_callback_executor, NULL, NULL);
}