void* thr1 (void* arg) { int count; usecount = 0; locked = 0; release_thr1 = 1; while(1) { if(flag1) break; } do { if (__nondet_bool()) { count = 1; dummy_release (); } else count = 0; } while (count != 0); dummy_release (); unregister_chrdev (); return 0; }
void* thr1 (void* arg) { void* rval; int count; usecount = 0; locked = 0; release_thr1 = 1; while(1) { if(flag1) break; } do { rval = (void*)__VERIFIER_nondet_int(); if (rval == 0) { count = 1; dummy_release (); } else count = 0; } while (count != 0); dummy_release (); unregister_chrdev (); return 0; }
int main () { int rval; int size; struct file my_file; char *buffer; /* we do not model this buffer */ struct inode inode; unsigned int count; unsigned char random; int lock_held = 0; dummy_major = register_chrdev (0, "dummy"); inode.i_rdev = dummy_major << MINORBITS; init_module (); /* assign arbitrary values */ my_file.f_mode = nondet_uint (); my_file.f_pos = nondet_uint (); do { random = nondet_uchar (); __CPROVER_assume (0 <= random && random <= 3); switch (random) { case 1: rval = dummy_open (&inode, &my_file); if (rval == 0) lock_held = TRUE; break; case 2: __CPROVER_assume (lock_held); count = dummy_read (&my_file, buffer, BUF_SIZE); break; case 3: dummy_release (&inode, &my_file); lock_held = FALSE; break; default: break; } } while (random || lock_held); cleanup_module (); unregister_chrdev (dummy_major, "dummy"); return 0; }