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);
 | 
						free(null_buffer);
 | 
				
			||||||
	close(fd);
 | 
						close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("file created\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int job1()
 | 
					int test1_job1()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int fd = open(FILE_NAME, O_RDONLY);
 | 
						int fd = open(FILE_NAME, O_RDONLY);
 | 
				
			||||||
	if (fd == -1)
 | 
						if (fd == -1)
 | 
				
			||||||
| 
						 | 
					@ -60,12 +58,12 @@ int job1()
 | 
				
			||||||
	munmap(addr, FILE_SIZE);
 | 
						munmap(addr, FILE_SIZE);
 | 
				
			||||||
	close(fd);
 | 
						close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("sum: %zu\n", sum);
 | 
						printf("got:       %zu\n", sum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						exit(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int job2()
 | 
					int test1_job2()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sleep(2);
 | 
						sleep(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,14 +91,14 @@ int job2()
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main()
 | 
					int test1()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (int ret = prepare_file())
 | 
						if (int ret = prepare_file())
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pid_t pid = fork();
 | 
						pid_t pid = fork();
 | 
				
			||||||
	if (pid == 0)
 | 
						if (pid == 0)
 | 
				
			||||||
		return job1();
 | 
							return test1_job1();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (pid == -1)
 | 
						if (pid == -1)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -108,8 +106,92 @@ int main()
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int ret = job2();
 | 
						int ret = test1_job2();
 | 
				
			||||||
	waitpid(pid, nullptr, 0);
 | 
						waitpid(pid, nullptr, 0);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return ret;
 | 
						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