Skip to content

Commit fda4134

Browse files
authored
Merge pull request #99 from elast0ny/develop
Apply pending PRs
2 parents 344a5c4 + 308ff06 commit fda4134

File tree

10 files changed

+34
-30
lines changed

10 files changed

+34
-30
lines changed

.github/workflows/rust.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: build
22

33
on:
44
push:
5-
branches: [master]
5+
branches: [master, develop]
66
pull_request:
77

88
jobs:

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "shared_memory"
33
description = "A user friendly crate that allows you to share memory between processes"
4-
version = "0.12.4"
4+
version = "0.12.5"
55
authors = ["ElasT0ny <[email protected]>"]
66
license = "MIT OR Apache-2.0"
77
edition = "2018"
@@ -31,13 +31,13 @@ rand = "0.8"
3131
log = { version = "0.4", optional = true }
3232

3333
[target.'cfg(unix)'.dependencies]
34-
nix = "0.23"
34+
nix = { version = "0.26", default-features = false, features = ["fs", "mman"] }
3535
libc = "0.2"
3636

3737
[target.'cfg(windows)'.dependencies]
3838
win-sys = "0.3"
3939

4040
[dev-dependencies]
4141
raw_sync = "0.1"
42-
clap = {version = "3", features = ["derive"]}
42+
clap = {version = "4", features = ["derive"]}
4343
env_logger = "0"

changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
# 0.12.5
4+
- Update dependencies
5+
- Use minimal features for `nix` on unix systems
6+
37
# 0.12.4
48
- Allow Windows users to open shared memory that isnt managed by this crate
59
- Added tests

examples/basic.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,7 @@ fn increment_value(shmem_flink: &str, thread_num: usize, max: u8) {
4848
Ok(m) => m,
4949
Err(ShmemError::LinkExists) => ShmemConf::new().flink(shmem_flink).open().unwrap(),
5050
Err(e) => {
51-
eprintln!(
52-
"Unable to create or open shmem flink {} : {}",
53-
shmem_flink, e
54-
);
51+
eprintln!("Unable to create or open shmem flink {shmem_flink} : {e}");
5552
return;
5653
}
5754
};

examples/event.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
1515
//Create an event in the shared memory
1616
println!("Creating event in shared memory");
1717
let (evt, used_bytes) = unsafe { Event::new(shmem.as_ptr(), true)? };
18-
println!("\tUsed {} bytes", used_bytes);
18+
println!("\tUsed {used_bytes} bytes");
1919

2020
println!("Launch another instance of this example to signal the event !");
2121
evt.wait(Timeout::Infinite)?;
@@ -24,7 +24,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
2424
// Open existing event
2525
println!("Openning event from shared memory");
2626
let (evt, used_bytes) = unsafe { Event::from_existing(shmem.as_ptr())? };
27-
println!("\tEvent uses {} bytes", used_bytes);
27+
println!("\tEvent uses {used_bytes} bytes");
2828

2929
println!("Signaling event !");
3030
evt.set(EventState::Signaled)?;

examples/mutex.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,7 @@ fn increment_value(shmem_flink: &str, thread_num: usize) {
4848
Ok(m) => m,
4949
Err(ShmemError::LinkExists) => ShmemConf::new().flink(shmem_flink).open().unwrap(),
5050
Err(e) => {
51-
eprintln!(
52-
"Unable to create or open shmem flink {} : {}",
53-
shmem_flink, e
54-
);
51+
eprintln!("Unable to create or open shmem flink {shmem_flink} : {e}");
5552
return;
5653
}
5754
};
@@ -99,7 +96,7 @@ fn increment_value(shmem_flink: &str, thread_num: usize) {
9996
// Cast mutex data to &mut u8
10097
let val: &mut u8 = unsafe { &mut **guard };
10198
if *val > 5 {
102-
println!("[thread#{}] done !", thread_num);
99+
println!("[thread#{thread_num}] done !");
103100
return;
104101
}
105102

src/error.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ impl std::fmt::Display for ShmemError {
2121
ShmemError::MapSizeZero => f.write_str("You cannot create a shared memory mapping of 0 size"),
2222
ShmemError::NoLinkOrOsId => f.write_str("Tried to open mapping without flink path or os_id"),
2323
ShmemError::FlinkInvalidOsId => f.write_str("Tried to open mapping from both flink and os_id but the flink did not point to the same os_id"),
24-
ShmemError::LinkCreateFailed(err) => write!(f, "Creating the link file failed, {}", err),
25-
ShmemError::LinkWriteFailed(err) => write!(f, "Writing the link file failed, {}", err),
24+
ShmemError::LinkCreateFailed(err) => write!(f, "Creating the link file failed, {err}"),
25+
ShmemError::LinkWriteFailed(err) => write!(f, "Writing the link file failed, {err}"),
2626
ShmemError::LinkExists => f.write_str("Shared memory link already exists"),
27-
ShmemError::LinkOpenFailed(err) => write!(f, "Opening the link file failed, {}", err),
28-
ShmemError::LinkReadFailed(err) => write!(f, "Reading the link file failed, {}", err),
27+
ShmemError::LinkOpenFailed(err) => write!(f, "Opening the link file failed, {err}"),
28+
ShmemError::LinkReadFailed(err) => write!(f, "Reading the link file failed, {err}"),
2929
ShmemError::LinkDoesNotExist => f.write_str("Requested link file does not exist"),
3030
ShmemError::MappingIdExists => f.write_str("Shared memory OS specific ID already exists"),
31-
ShmemError::MapCreateFailed(err) => write!(f, "Creating the shared memory failed, os error {}", err),
32-
ShmemError::MapOpenFailed(err) => write!(f, "Opening the shared memory failed, os error {}", err),
33-
ShmemError::UnknownOsError(err) => write!(f, "An unexpected OS error occurred, os error {}", err),
31+
ShmemError::MapCreateFailed(err) => write!(f, "Creating the shared memory failed, os error {err}"),
32+
ShmemError::MapOpenFailed(err) => write!(f, "Opening the shared memory failed, os error {err}"),
33+
ShmemError::UnknownOsError(err) => write!(f, "An unexpected OS error occurred, os error {err}"),
3434
}
3535
}
3636
}

src/unix.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::num::NonZeroUsize;
12
use std::os::unix::io::RawFd;
23
use std::ptr::null_mut;
34

@@ -83,6 +84,9 @@ impl MapData {
8384
pub fn create_mapping(unique_id: &str, map_size: usize) -> Result<MapData, ShmemError> {
8485
//Create shared memory file descriptor
8586
debug!("Creating persistent mapping at {}", unique_id);
87+
88+
let nz_map_size = NonZeroUsize::new(map_size).ok_or(ShmemError::MapSizeZero)?;
89+
8690
let shmem_fd = match shm_open(
8791
unique_id, //Unique name that usualy pops up in /dev/shm/
8892
OFlag::O_CREAT | OFlag::O_EXCL | OFlag::O_RDWR, //create exclusively (error if collision) and read/write to allow resize
@@ -122,8 +126,8 @@ pub fn create_mapping(unique_id: &str, map_size: usize) -> Result<MapData, Shmem
122126
debug!("Loading mapping into address space");
123127
new_map.map_ptr = match unsafe {
124128
mmap(
125-
null_mut(), //Desired addr
126-
new_map.map_size, //size of mapping
129+
None, //Desired addr
130+
nz_map_size, //size of mapping
127131
ProtFlags::PROT_READ | ProtFlags::PROT_WRITE, //Permissions on pages
128132
MapFlags::MAP_SHARED, //What kind of mapping
129133
new_map.map_fd, //fd
@@ -187,12 +191,14 @@ pub fn open_mapping(
187191
Err(e) => return Err(ShmemError::MapOpenFailed(e as u32)),
188192
};
189193

194+
let nz_map_size = NonZeroUsize::new(new_map.map_size).ok_or(ShmemError::MapSizeZero)?;
195+
190196
//Map memory into our address space
191197
debug!("Loading mapping into address space");
192198
new_map.map_ptr = match unsafe {
193199
mmap(
194-
null_mut(), //Desired addr
195-
new_map.map_size, //size of mapping
200+
None, //Desired addr
201+
nz_map_size, //size of mapping
196202
ProtFlags::PROT_READ | ProtFlags::PROT_WRITE, //Permissions on pages
197203
MapFlags::MAP_SHARED, //What kind of mapping
198204
new_map.map_fd, //fd

tests/general.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ fn open_flink() {
6969
let s1 = ShmemConf::new().flink(flink).size(4090).create().unwrap();
7070

7171
// Open with file base link
72-
let mut s2 = ShmemConf::new().flink(&flink).open().unwrap();
72+
let mut s2 = ShmemConf::new().flink(flink).open().unwrap();
7373

7474
assert!(!s2.is_owner());
7575
assert!(!s2.get_os_id().is_empty());
@@ -85,7 +85,7 @@ fn open_flink() {
8585
drop(s1);
8686

8787
// Make sure it can be openned again
88-
assert!(ShmemConf::new().flink(&flink).open().is_err());
88+
assert!(ShmemConf::new().flink(flink).open().is_err());
8989

9090
drop(s2);
9191
}
@@ -99,7 +99,7 @@ fn share_data() {
9999

100100
// Open with the unique os id
101101
let os_id = s1.get_os_id().to_string();
102-
let s2 = ShmemConf::new().os_id(&os_id).open().unwrap();
102+
let s2 = ShmemConf::new().os_id(os_id).open().unwrap();
103103

104104
let ptr1 = s1.as_ptr() as *mut u32;
105105
let ptr2 = s2.as_ptr() as *mut u32;

tests/posix_semantics.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ fn posix_behavior() {
7777
// This thread keeps a shared memory instance alive until it's told to
7878
// drop it.
7979
let existing_os_id = rx_c.recv().unwrap();
80-
let _shmem = ShmemConf::new().os_id(&existing_os_id).open().unwrap();
80+
let _shmem = ShmemConf::new().os_id(existing_os_id).open().unwrap();
8181
// Indicate to thread A that the instance has been created.
8282
tx_a.send(String::new()).unwrap();
8383
// Shut down signal.

0 commit comments

Comments
 (0)