/*- * Copyright (c) 2008-2014 WiredTiger, Inc. * All rights reserved. * * See the file LICENSE for redistribution information. */ #define WT_SYSCALL_RETRY(call, ret) do { \ int __retry; \ for (__retry = 0; __retry < 10; ++__retry) { \ if ((call) == 0) { \ (ret) = 0; \ break; \ } \ switch ((ret) = __wt_errno()) { \ case 0: \ /* The call failed but didn't set errno. */ \ (ret) = WT_ERROR; \ break; \ case EAGAIN: \ case EBUSY: \ case EINTR: \ case EIO: \ case EMFILE: \ case ENFILE: \ case ENOSPC: \ __wt_sleep(0L, 500000L); \ continue; \ default: \ break; \ } \ break; \ } \ } while (0) #define WT_TIMEDIFF(end, begin) \ (1000000000 * (uint64_t)((end).tv_sec - (begin).tv_sec) + \ (uint64_t)(end).tv_nsec - (uint64_t)(begin).tv_nsec) #define WT_TIMECMP(t1, t2) \ ((t1).tv_sec < (t2).tv_sec ? -1 : \ (t1).tv_sec == (t2.tv_sec) ? \ (t1).tv_nsec < (t2).tv_nsec ? -1 : \ (t1).tv_nsec == (t2).tv_nsec ? 0 : 1 : 1) struct __wt_fh { u_int refcnt; /* Reference count */ TAILQ_ENTRY(__wt_fh) q; /* List of open handles */ char *name; /* File name */ int fd; /* POSIX file handle */ off_t size; /* File size */ off_t extend_size; /* File extended size */ off_t extend_len; /* File extend chunk size */ int direct_io; /* O_DIRECT configured */ };