EXPORT_SYM bool hdfs_future_get_timeout(struct hdfs_rpc_response_future *future, struct hdfs_object **object, uint64_t ms) { uint64_t absms; absms = _now_ms() + ms; _lock(&future->fu_lock); while (!future->fu_res && _now_ms() < absms) _waitlimit(&future->fu_lock, &future->fu_cond, absms); if (!future->fu_res) { _unlock(&future->fu_lock); return false; } _unlock(&future->fu_lock); *object = future->fu_res; _namenode_decref(future->fu_namenode); memset(future, 0, sizeof *future); return true; }
EXPORT_SYM bool hdfs_future_get_timeout(struct hdfs_rpc_response_future *future, struct hdfs_object **object, uint64_t ms) { uint64_t absms; ASSERT(future->fu_inited && future->fu_invoked); absms = _now_ms() + ms; _lock(&future->fu_lock); while (!future->fu_res && _now_ms() < absms) _waitlimit(&future->fu_lock, &future->fu_cond, absms); if (!future->fu_res) { _unlock(&future->fu_lock); return false; } _unlock(&future->fu_lock); *object = future->fu_res; hdfs_rpc_response_future_clean(future); return true; }