bool is_addr_in_use(apr_status_t status) { #if LL_WINDOWS return (WSAEADDRINUSE == APR_TO_OS_ERROR(status)); #else return (EADDRINUSE == APR_TO_OS_ERROR(status)); #endif }
/* Return the transaction name of the activity stored in file PATHNAME, or NULL if PATHNAME cannot be read for any reason. */ static const char * read_txn(const char *pathname, apr_pool_t *pool) { apr_file_t *activity_file; apr_pool_t *iterpool = svn_pool_create(pool); apr_size_t len; svn_error_t *err = SVN_NO_ERROR; char *txn_name = apr_palloc(pool, SVN_FS__TXN_MAX_LEN+1); int i; /* Try up to 10 times to read the txn name, retrying on ESTALE (stale NFS file handle because of dav_svn__store_activity renaming the activity file into place). */ for (i = 0; i < 10; i++) { svn_error_clear(err); svn_pool_clear(iterpool); err = svn_io_file_open(&activity_file, pathname, APR_READ | APR_BUFFERED, APR_OS_DEFAULT, iterpool); if (err) { #ifdef ESTALE if (APR_TO_OS_ERROR(err->apr_err) == ESTALE) /* Retry on ESTALE... */ continue; #endif /* ...else bail. */ break; } len = SVN_FS__TXN_MAX_LEN; err = svn_io_read_length_line(activity_file, txn_name, &len, iterpool); if (err) { #ifdef ESTALE if (APR_TO_OS_ERROR(err->apr_err) == ESTALE) continue; #endif break; } err = svn_io_file_close(activity_file, iterpool); #ifdef ESTALE if (err) { if (APR_TO_OS_ERROR(err->apr_err) == ESTALE) { /* No retry, just completely ignore this ESTALE. */ svn_error_clear(err); err = SVN_NO_ERROR; } } #endif /* We have a txn_name or had a non-ESTALE close failure; either way, we're finished. */ break; } svn_pool_destroy(iterpool); /* ### let's just assume that any error means the ### activity/transaction doesn't exist */ if (err) { svn_error_clear(err); return NULL; } return txn_name; }