示例#1
0
void
data_cleanup(void *arg)
{
    data_t *data = (data_t *)arg;

    if (!data_cleanup_executed) {
        assert_x_eq(*data, THREAD_DATA,
                    "Argument passed into cleanup function should match tsd "
                    "value");
    }
    data_cleanup_executed = true;

    /*
     * Allocate during cleanup for two rounds, in order to assure that
     * jemalloc's internal tsd reinitialization happens.
     */
    switch (*data) {
    case THREAD_DATA:
        *data = 1;
        data_tsd_set(data);
        break;
    case 1:
        *data = 2;
        data_tsd_set(data);
        break;
    case 2:
        return;
    default:
        not_reached();
    }

    {
        void *p = mallocx(1, 0);
        assert_ptr_not_null(p, "Unexpeced mallocx() failure");
        dallocx(p, 0);
    }
}
示例#2
0
static void *
thd_start(void *arg)
{
    data_t d = (data_t)(uintptr_t)arg;
    assert_x_eq(*data_tsd_get(), DATA_INIT,
                "Initial tsd get should return initialization value");

    data_tsd_set(&d);
    assert_x_eq(*data_tsd_get(), d,
                "After tsd set, tsd get should return value that was set");

    d = 0;
    assert_x_eq(*data_tsd_get(), (data_t)(uintptr_t)arg,
                "Resetting local data should have no effect on tsd");

    return (NULL);
}
示例#3
0
文件: tsd.c 项目: DawidvC/chapel
static void *
thd_start(void *arg)
{
	data_t d = (data_t)(uintptr_t)arg;
	void *p;

	assert_x_eq(*data_tsd_get(true), DATA_INIT,
	    "Initial tsd get should return initialization value");

	p = malloc(1);
	assert_ptr_not_null(p, "Unexpected malloc() failure");

	data_tsd_set(&d);
	assert_x_eq(*data_tsd_get(true), d,
	    "After tsd set, tsd get should return value that was set");

	d = 0;
	assert_x_eq(*data_tsd_get(true), (data_t)(uintptr_t)arg,
	    "Resetting local data should have no effect on tsd");

	free(p);
	return (NULL);
}