forked from Bananymous/banan-os
				
			mmap-shared-test: Add test case for msync
This commit is contained in:
		
							parent
							
								
									60e755210c
								
							
						
					
					
						commit
						4c3da66c92
					
				| 
						 | 
				
			
			@ -30,12 +30,10 @@ int prepare_file()
 | 
			
		|||
	free(null_buffer);
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	printf("file created\n");
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int job1()
 | 
			
		||||
int test1_job1()
 | 
			
		||||
{
 | 
			
		||||
	int fd = open(FILE_NAME, O_RDONLY);
 | 
			
		||||
	if (fd == -1)
 | 
			
		||||
| 
						 | 
				
			
			@ -60,12 +58,12 @@ int job1()
 | 
			
		|||
	munmap(addr, FILE_SIZE);
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	printf("sum: %zu\n", sum);
 | 
			
		||||
	printf("got:       %zu\n", sum);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int job2()
 | 
			
		||||
int test1_job2()
 | 
			
		||||
{
 | 
			
		||||
	sleep(2);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -93,14 +91,14 @@ int job2()
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
int test1()
 | 
			
		||||
{
 | 
			
		||||
	if (int ret = prepare_file())
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	pid_t pid = fork();
 | 
			
		||||
	if (pid == 0)
 | 
			
		||||
		return job1();
 | 
			
		||||
		return test1_job1();
 | 
			
		||||
 | 
			
		||||
	if (pid == -1)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -108,8 +106,92 @@ int main()
 | 
			
		|||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int ret = job2();
 | 
			
		||||
	int ret = test1_job2();
 | 
			
		||||
	waitpid(pid, nullptr, 0);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int test2_job1()
 | 
			
		||||
{
 | 
			
		||||
	sleep(2);
 | 
			
		||||
 | 
			
		||||
	int fd = open(FILE_NAME, O_RDWR);
 | 
			
		||||
	if (fd == -1)
 | 
			
		||||
	{
 | 
			
		||||
		perror("open");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	size_t value = 0;
 | 
			
		||||
	if (read(fd, &value, sizeof(size_t)) == -1)
 | 
			
		||||
	{
 | 
			
		||||
		perror("read");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf("got:       %zu\n", value);
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int test2_job2()
 | 
			
		||||
{
 | 
			
		||||
	int fd = open(FILE_NAME, O_RDWR);
 | 
			
		||||
	if (fd == -1)
 | 
			
		||||
	{
 | 
			
		||||
		perror("open");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void* addr = mmap(nullptr, FILE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
 | 
			
		||||
	if (addr == MAP_FAILED)
 | 
			
		||||
	{
 | 
			
		||||
		perror("mmap");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*(size_t*)addr = 0x123456789;
 | 
			
		||||
 | 
			
		||||
	if (msync(addr, sizeof(size_t), MS_SYNC) == -1)
 | 
			
		||||
	{
 | 
			
		||||
		perror("msync");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf("expecting: %zu\n", *(size_t*)addr);
 | 
			
		||||
 | 
			
		||||
	sleep(4);
 | 
			
		||||
 | 
			
		||||
	munmap(addr, FILE_SIZE);
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int test2()
 | 
			
		||||
{
 | 
			
		||||
	if (int ret = prepare_file())
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	pid_t pid = fork();
 | 
			
		||||
	if (pid == 0)
 | 
			
		||||
		return test2_job1();
 | 
			
		||||
 | 
			
		||||
	if (pid == -1)
 | 
			
		||||
	{
 | 
			
		||||
		perror("fork");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int ret = test2_job2();
 | 
			
		||||
	waitpid(pid, nullptr, 0);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
	test1();
 | 
			
		||||
	test2();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue