/* gcc `pkg-config --cflags --libs libical` -lpthread icaltm.c -g -O0 -o icaltm && for ii in {1..10}; do ./icaltm; done */

/* To run under Address Sanitizer:
   gcc `pkg-config --cflags --libs libical` -lpthread -fsanitize=address,bounds,alignment,object-size -fno-omit-frame-pointer -lasan -lubsan -ldl icaltm.c -g -O0 -o icaltm
   export ASAN_OPTIONS=abort_on_error=1:detect_stack_use_after_return=0:detect_leaks=0:handle_segv=0:check_printf=0:detect_deadlocks=1:replace_str=1:replace_intrin=1:alloc_dealloc_mismatch=1:new_delete_type_mismatch=1:detect_container_overflow=1:symbolize=1
   for ii in {1..10}; do ./icaltm; done */

#include <pthread.h>
#include <libical/ical.h>

static icaltimezone *zone, *utc;

static void *
test_tread (void * user_data)
{
	struct icaltimetype itt;
	int ii;

	itt = icaltime_from_string ("19710203T040506");
	itt.zone = zone;

	for (ii = 0; ii < 200; ii++, itt.year++) {
		icaltime_convert_to_zone (itt, utc);
	}

	return NULL;
}

int main (int argc, char *argv[])
{
	pthread_t thread[2];
	int ii;

	zone = icaltimezone_get_builtin_timezone ("America/New_York");
	utc = icaltimezone_get_utc_timezone ();

	for (ii = 0; ii < 2; ii++) {
		pthread_create (&thread[ii], NULL, test_tread, NULL);
	}

	for (ii = 0; ii < 2; ii++) {
		pthread_join (thread[ii], NULL);
	}

	return 0;
}
