Lines Matching refs:lrap

52 	librename_atomic_t *lrap;  in librename_atomic_fdinit()  local
68 lrap = malloc(sizeof (librename_atomic_t)); in librename_atomic_fdinit()
69 if (lrap == NULL) in librename_atomic_fdinit()
74 free(lrap); in librename_atomic_fdinit()
79 free(lrap); in librename_atomic_fdinit()
83 if ((lrap->lra_dirfd = dup(fd)) == -1) { in librename_atomic_fdinit()
85 free(lrap); in librename_atomic_fdinit()
89 lrap->lra_fname = strdup(file); in librename_atomic_fdinit()
90 if (lrap->lra_fname == NULL) { in librename_atomic_fdinit()
92 VERIFY0(close(lrap->lra_dirfd)); in librename_atomic_fdinit()
93 free(lrap); in librename_atomic_fdinit()
98 ret = asprintf(&lrap->lra_altname, ".%d.%s", (int)getpid(), in librename_atomic_fdinit()
101 ret = asprintf(&lrap->lra_altname, "%s%s", prefix, file); in librename_atomic_fdinit()
105 free(lrap->lra_fname); in librename_atomic_fdinit()
106 VERIFY0(close(lrap->lra_dirfd)); in librename_atomic_fdinit()
107 free(lrap); in librename_atomic_fdinit()
118 lrap->lra_tmpfd = openat(lrap->lra_dirfd, lrap->lra_altname, in librename_atomic_fdinit()
120 if (lrap->lra_tmpfd < 0) { in librename_atomic_fdinit()
122 free(lrap->lra_altname); in librename_atomic_fdinit()
123 free(lrap->lra_fname); in librename_atomic_fdinit()
124 VERIFY0(close(lrap->lra_dirfd)); in librename_atomic_fdinit()
125 free(lrap); in librename_atomic_fdinit()
129 VERIFY0(mutex_init(&lrap->lra_lock, USYNC_THREAD, NULL)); in librename_atomic_fdinit()
131 lrap->lra_state = LIBRENAME_ATOMIC_INITIAL; in librename_atomic_fdinit()
132 *outp = lrap; in librename_atomic_fdinit()
152 librename_atomic_fd(librename_atomic_t *lrap) in librename_atomic_fd() argument
154 return (lrap->lra_tmpfd); in librename_atomic_fd()
165 librename_atomic_commit(librename_atomic_t *lrap) in librename_atomic_commit() argument
169 VERIFY0(mutex_lock(&lrap->lra_lock)); in librename_atomic_commit()
170 if (lrap->lra_state == LIBRENAME_ATOMIC_COMPLETED) { in librename_atomic_commit()
175 if (fsync(lrap->lra_tmpfd) != 0) { in librename_atomic_commit()
179 lrap->lra_state = LIBRENAME_ATOMIC_FSYNC; in librename_atomic_commit()
181 if (renameat(lrap->lra_dirfd, lrap->lra_altname, lrap->lra_dirfd, in librename_atomic_commit()
182 lrap->lra_fname) != 0) { in librename_atomic_commit()
186 lrap->lra_state = LIBRENAME_ATOMIC_RENAME; in librename_atomic_commit()
188 if (fsync(lrap->lra_tmpfd) != 0) { in librename_atomic_commit()
192 lrap->lra_state = LIBRENAME_ATOMIC_POSTSYNC; in librename_atomic_commit()
194 if (fsync(lrap->lra_dirfd) != 0) { in librename_atomic_commit()
198 lrap->lra_state = LIBRENAME_ATOMIC_COMPLETED; in librename_atomic_commit()
201 VERIFY0(mutex_unlock(&lrap->lra_lock)); in librename_atomic_commit()
206 librename_atomic_fini(librename_atomic_t *lrap) in librename_atomic_fini() argument
209 free(lrap->lra_altname); in librename_atomic_fini()
210 free(lrap->lra_fname); in librename_atomic_fini()
211 VERIFY0(close(lrap->lra_tmpfd)); in librename_atomic_fini()
212 VERIFY0(close(lrap->lra_dirfd)); in librename_atomic_fini()
213 VERIFY0(mutex_destroy(&lrap->lra_lock)); in librename_atomic_fini()
214 free(lrap); in librename_atomic_fini()