Skip to content

Commit 2e710be

Browse files
authored
Merge pull request #9568 from jepler/issue9426
Avoid crashing when display components are deinitialized
2 parents 503f1e2 + 0c84b12 commit 2e710be

File tree

21 files changed

+64
-0
lines changed

21 files changed

+64
-0
lines changed

ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ CHIP_FAMILY = samd21
99
SPI_FLASH_FILESYSTEM = 1
1010
EXTERNAL_FLASH_DEVICES = "W25Q64JVxQ"
1111
LONGINT_IMPL = MPZ
12+
13+
CIRCUITPY_CODEOP = 0
14+
CIRCUITPY_PARALLELDISPLAYBUS = 0

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) {

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

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

215215
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
216+
if (common_hal_busio_spi_deinited(self)) {
217+
return false;
218+
}
216219
bool grabbed_lock = false;
217220
// NRFX_CRITICAL_SECTION_ENTER();
218221
if (!self->has_lock) {

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

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

132132
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
133+
if (common_hal_busio_i2c_deinited(self)) {
134+
return false;
135+
}
133136
bool grabbed_lock = false;
134137
if (!self->has_lock) {
135138
grabbed_lock = true;

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

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

152152
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
153+
if (common_hal_busio_spi_deinited(self)) {
154+
return false;
155+
}
153156
bool grabbed_lock = false;
154157
if (!self->has_lock) {
155158
grabbed_lock = true;

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

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

3333
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
34+
if (common_hal_busio_i2c_deinited(self)) {
35+
return false;
36+
}
3437
return false;
3538
}
3639

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

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

3535
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
36+
if (common_hal_busio_spi_deinited(self)) {
37+
return false;
38+
}
3639
return false;
3740
}
3841

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

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

126126
// Lock I2C bus
127127
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
128+
if (common_hal_busio_i2c_deinited(self)) {
129+
return false;
130+
}
128131
bool grabbed_lock = false;
129132

130133
if (!self->has_lock) {

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

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

187187
// Lock SPI bus
188188
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
189+
if (common_hal_busio_spi_deinited(self)) {
190+
return false;
191+
}
189192
bool grabbed_lock = false;
190193
if (!self->has_lock) {
191194
grabbed_lock = true;

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

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

200200
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
201+
if (common_hal_busio_i2c_deinited(self)) {
202+
return false;
203+
}
201204
bool grabbed_lock = false;
202205

203206
// Critical section code that may be required at some point.

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

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

299299
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
300+
if (common_hal_busio_spi_deinited(self)) {
301+
return false;
302+
}
300303
bool grabbed_lock = false;
301304

302305
// Critical section code that may be required at some point.

shared-module/displayio/bus_core.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ bool displayio_display_bus_is_free(displayio_display_bus_t *self) {
9090
}
9191

9292
bool displayio_display_bus_begin_transaction(displayio_display_bus_t *self) {
93+
mp_obj_base_t *bus_base = MP_OBJ_TO_PTR(self->bus);
94+
if (bus_base->type == &mp_type_NoneType) {
95+
return false;
96+
}
9397
return self->begin_transaction(self->bus);
9498
}
9599

0 commit comments

Comments
 (0)