Skip to content

Commit 19e5cf3

Browse files
committed
Avoid crashing when display components are deinitialized
Now, try_lock (SPI & I2C) & begin_transaction (display bus core) will check that the related objects are still valid first; if they are not, the lock/begin transaction will fail by returning false, rather than "other things" such as raising a Python exception where it is not permitted, accessing invalid memory, etc. Closes #8278 and Closes #9426
1 parent 14c86ef commit 19e5cf3

File tree

20 files changed

+61
-0
lines changed

20 files changed

+61
-0
lines changed

ports/atmel-samd/common-hal/busio/I2C.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
147147
}
148148

149149
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
150+
if (common_hal_busio_i2c_deinited(self)) {
151+
return false;
152+
}
150153
bool grabbed_lock = false;
151154
CRITICAL_SECTION_ENTER()
152155
if (!self->has_lock) {

ports/atmel-samd/common-hal/busio/SPI.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
222222
}
223223

224224
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
225+
if (common_hal_busio_spi_deinited(self)) {
226+
return false;
227+
}
225228
bool grabbed_lock = false;
226229
CRITICAL_SECTION_ENTER()
227230
if (!self->has_lock) {

ports/broadcom/common-hal/busio/I2C.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
109109
}
110110

111111
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
112+
if (common_hal_busio_i2c_deinited(self)) {
113+
return false;
114+
}
112115
bool grabbed_lock = false;
113116
if (!self->has_lock) {
114117
grabbed_lock = true;

ports/broadcom/common-hal/busio/SPI.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
200200
}
201201

202202
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
203+
if (common_hal_busio_spi_deinited(self)) {
204+
return false;
205+
}
203206
bool grabbed_lock = false;
204207
if (!self->has_lock) {
205208
grabbed_lock = true;

ports/cxd56/common-hal/busio/I2C.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) {
5151
}
5252

5353
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
54+
if (common_hal_busio_i2c_deinited(self)) {
55+
return false;
56+
}
5457
bool grabbed_lock = false;
5558
if (!self->has_lock) {
5659
grabbed_lock = true;

ports/cxd56/common-hal/busio/SPI.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self, uint32_t baudrate, ui
9696
}
9797

9898
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
99+
if (common_hal_busio_spi_deinited(self)) {
100+
return false;
101+
}
99102
bool grabbed_lock = false;
100103
if (!self->has_lock) {
101104
grabbed_lock = true;

ports/espressif/common-hal/busio/I2C.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
141141
}
142142

143143
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
144+
if (common_hal_busio_i2c_deinited(self)) {
145+
return false;
146+
}
144147
if (self->has_lock) {
145148
return false;
146149
}

ports/mimxrt10xx/common-hal/busio/I2C.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
187187
}
188188

189189
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
190+
if (common_hal_busio_i2c_deinited(self)) {
191+
return false;
192+
}
190193
bool grabbed_lock = false;
191194
// CRITICAL_SECTION_ENTER()
192195
if (!self->has_lock) {

ports/mimxrt10xx/common-hal/busio/SPI.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
272272
}
273273

274274
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
275+
if (common_hal_busio_spi_deinited(self)) {
276+
return false;
277+
}
275278
bool grabbed_lock = false;
276279
// CRITICAL_SECTION_ENTER()
277280
if (!self->has_lock) {

ports/nordic/common-hal/busio/I2C.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,9 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
216216
}
217217

218218
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
219+
if (common_hal_busio_i2c_deinited(self)) {
220+
return false;
221+
}
219222
bool grabbed_lock = false;
220223
// NRFX_CRITICAL_SECTION_ENTER();
221224
if (!self->has_lock) {

0 commit comments

Comments
 (0)