Ejemplo n.º 1
0
int tup_lock_init(void)
{
	sh_lock = openat(tup_top_fd(), TUP_SHARED_LOCK, O_RDWR);
	if(sh_lock < 0) {
		perror(TUP_SHARED_LOCK);
		return -1;
	}
	if(tup_flock(sh_lock) < 0) {
		return -1;
	}

	obj_lock = openat(tup_top_fd(), TUP_OBJECT_LOCK, O_RDWR);
	if(obj_lock < 0) {
		perror(TUP_OBJECT_LOCK);
		return -1;
	}
	if(tup_flock(obj_lock) < 0) {
		return -1;
	}

	tri_lock = openat(tup_top_fd(), TUP_TRI_LOCK, O_RDWR);
	if(tri_lock < 0) {
		perror(TUP_TRI_LOCK);
		return -1;
	}
	return 0;
}
Ejemplo n.º 2
0
void tup_lock_exit(void)
{
	tup_unflock(obj_lock);
	close(obj_lock);
	/* Wait for the monitor to pick up the object lock */
	tup_flock(tri_lock);
	tup_unflock(tri_lock);
	close(tri_lock);
	tup_unflock(sh_lock);
	close(sh_lock);
}
Ejemplo n.º 3
0
int tup_lock_init(void)
{
	int ret;

	if(tup_lock_open(TUP_SHARED_LOCK, &sh_lock) < 0)
		return -1;
	ret = tup_try_flock(sh_lock);
	if(ret > 0) {
		printf("Waiting for another tup process (or an autoupdate) to finish...\n");
		ret = tup_flock(sh_lock);
	}
	if(ret < 0) {
		return -1;
	}

	if(tup_lock_open(TUP_OBJECT_LOCK, &obj_lock) < 0)
		return -1;
	if(tup_flock(obj_lock) < 0)
		return -1;

	if(tup_lock_open(TUP_TRI_LOCK, &tri_lock) < 0)
		return -1;
	return 0;
}