void promise_test (bool verbose) { printf (" * promise: "); // @selftest // Test promise is fulfilled. pthread_t thread1; promise_t *promise1 = promise_new (); future_t *future1 = promise_get_future (promise1); pthread_create (&thread1, NULL, test_fulfill_thread, (void *) promise1); char *value = (char *) future_get (future1); assert (streq (value, "value")); free (value); pthread_join (thread1, NULL); promise_destroy (&promise1); future_destroy (&future1); // Test promise is rejected. pthread_t thread2; promise_t *promise2 = promise_new (); future_t *future2 = promise_get_future (promise2); pthread_create (&thread2, NULL, test_reject_thread, (void *) promise2); future_wait (future2); assert (future_is_resolved (future2)); assert (future_is_fulfilled (future2) == false); assert (future_rejected_code (future2) == -1); pthread_join (thread2, NULL); promise_destroy (&promise2); future_destroy (&future2); // @end printf ("OK\n"); }
void message_destroy(message_t *message) { promise_destroy( message->promise ); message->promise = NULL; free( message ); }
void cleanup_execute (future_t *future, void *args) { promise_t *promise = (promise_t *) args; promise_destroy (&promise); }