int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) { if (INJECT_FAULT(pthread_create, EAGAIN)) { return -1; } unsigned int newIdx; STATIC_LIST_ALLOC(__tsync.threads, newIdx); if (newIdx == MAX_THREADS) { errno = EAGAIN; return -1; } thread_data_t *tdata = &__tsync.threads[newIdx]; tdata->terminated = 0; tdata->joinable = 1; // TODO: Read this from an attribute tdata->wlist = klee_get_wlist(); klee_thread_create(newIdx, start_routine, arg); *thread = newIdx; return 0; }
// get the method table for dynamic methods DynamicMethodTable* DomainFile::GetDynamicMethodTable() { CONTRACT (DynamicMethodTable*) { INSTANCE_CHECK; THROWS; GC_TRIGGERS; MODE_ANY; INJECT_FAULT(COMPlusThrowOM()); POSTCONDITION(CheckPointer(m_pDynamicMethodTable)); }