diff --git a/arch/arm/src/sam34/sam_rtc.c b/arch/arm/src/sam34/sam_rtc.c index a375830e312..3dd26c40b4e 100644 --- a/arch/arm/src/sam34/sam_rtc.c +++ b/arch/arm/src/sam34/sam_rtc.c @@ -657,8 +657,8 @@ int sam_rtc_setalarm(const struct timespec *tp, alarmcb_t callback) /* Is there already something waiting on the ALARM? */ - flags = spin_lock_irqsave(&g_rtc_lock); - sched_lock(); + flags = spin_lock_irqsave_nopreempt(&g_rtc_lock); + if (g_alarmcb == NULL) { /* No.. Save the callback function pointer */ @@ -736,8 +736,7 @@ int sam_rtc_setalarm(const struct timespec *tp, alarmcb_t callback) ret = OK; } - spin_unlock_irqrestore(&g_rtc_lock, flags); - sched_unlock(); + spin_unlock_irqrestore_nopreempt(&g_rtc_lock, flags); return ret; } #endif