File tree Expand file tree Collapse file tree 1 file changed +5
-1
lines changed 
ports/espressif/common-hal/busio Expand file tree Collapse file tree 1 file changed +5
-1
lines changed Original file line number Diff line number Diff line change @@ -129,6 +129,7 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
129129
130130    // Wait for any other users of this to finish. 
131131    while  (!common_hal_busio_spi_try_lock (self )) {
132+         RUN_BACKGROUND_TASKS ;
132133    }
133134
134135    // Mark us as deinit early in case we are used in an interrupt. 
@@ -139,7 +140,10 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
139140    spi_bus_remove_device (spi_handle [self -> host_id ]);
140141    spi_bus_free (self -> host_id );
141142
143+     // Release the mutex before we delete it. Otherwise FreeRTOS gets unhappy. 
144+     xSemaphoreGive (self -> mutex );
142145    vSemaphoreDelete (self -> mutex );
146+     self -> mutex  =  NULL ;
143147
144148    common_hal_reset_pin (self -> MOSI );
145149    common_hal_reset_pin (self -> MISO );
@@ -166,7 +170,7 @@ bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
166170}
167171
168172bool  common_hal_busio_spi_has_lock (busio_spi_obj_t  * self ) {
169-     return  xSemaphoreGetMutexHolder (self -> mutex ) ==  xTaskGetCurrentTaskHandle ();
173+     return  self -> mutex   !=   NULL   &&   xSemaphoreGetMutexHolder (self -> mutex ) ==  xTaskGetCurrentTaskHandle ();
170174}
171175
172176void  common_hal_busio_spi_unlock (busio_spi_obj_t  * self ) {
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments