Skip to content

Commit 53ccc62

Browse files
committed
Fall back to Rc on targets without atomics
`alloc::sync::Arc` is unavailable on targets without atomics, such as ESP32-C3, which is riscv32imc. In this case, use `Rc` instead, and make the user responsible for synchronization.
1 parent bffb834 commit 53ccc62

File tree

5 files changed

+11
-4
lines changed

5 files changed

+11
-4
lines changed

src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,11 @@
279279
#[macro_use]
280280
extern crate alloc;
281281

282+
#[cfg(target_has_atomic = "ptr")]
283+
type Arc<T> = alloc::sync::Arc<T>;
284+
#[cfg(not(target_has_atomic = "ptr"))]
285+
type Arc<T> = alloc::rc::Rc<T>;
286+
282287
// Common prelude with alloc types
283288
pub mod prelude {
284289
pub use alloc::{boxed::Box, format, string::String, vec, vec::Vec};

src/mqtt/common/arc_payload.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
// SOFTWARE.
2222

23-
use alloc::{string::String, sync::Arc, vec::Vec};
23+
use crate::Arc;
24+
use alloc::{string::String, vec::Vec};
2425
use serde::{Serialize, Serializer};
2526

2627
// SSO buffer size configuration - priority-based selection for maximum size

src/mqtt/connection/packet_builder.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
// SOFTWARE.
2222
use crate::mqtt::common::Cursor;
2323
use crate::mqtt::result_code::MqttError;
24-
use alloc::{sync::Arc, vec::Vec};
24+
use crate::Arc;
25+
use alloc::vec::Vec;
2526

2627
#[derive(Debug, Clone)]
2728
pub enum PacketData {

src/mqtt/packet/v3_1_1/publish.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
// SOFTWARE.
2222

23-
use alloc::sync::Arc;
2423
use alloc::vec::Vec;
2524
use core::fmt;
2625
use core::mem;
@@ -43,6 +42,7 @@ use crate::mqtt::packet::GenericPacketTrait;
4342
use crate::mqtt::packet::IsPacketId;
4443
use crate::mqtt::result_code::MqttError;
4544
use crate::mqtt::{ArcPayload, IntoPayload};
45+
use crate::Arc;
4646

4747
/// MQTT 3.1.1 PUBLISH packet representation
4848
///

src/mqtt/packet/v5_0/publish.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
// SOFTWARE.
2222

2323
use alloc::string::String;
24-
use alloc::sync::Arc;
2524
use alloc::vec::Vec;
2625
use core::fmt;
2726
use core::mem;
@@ -49,6 +48,7 @@ use crate::mqtt::packet::PropertiesToBuffers;
4948
use crate::mqtt::packet::{Properties, PropertiesParse, PropertiesSize, Property};
5049
use crate::mqtt::result_code::MqttError;
5150
use crate::mqtt::{ArcPayload, IntoPayload};
51+
use crate::Arc;
5252

5353
/// MQTT 5.0 PUBLISH packet representation
5454
///

0 commit comments

Comments
 (0)