Lock furi record for the whole notification process (#119)
Co-authored-by: aanper <mail@s3f.ru>
This commit is contained in:
		
							parent
							
								
									892a3b16da
								
							
						
					
					
						commit
						06ee165ab6
					
				| @ -209,8 +209,8 @@ void furi_give(FuriRecordSubscriber* handler) { | |||||||
| void furi_commit(FuriRecordSubscriber* handler) { | void furi_commit(FuriRecordSubscriber* handler) { | ||||||
|     if(handler == NULL || handler->record == NULL) return; |     if(handler == NULL || handler->record == NULL) return; | ||||||
| 
 | 
 | ||||||
|     furi_give(handler); |  | ||||||
|     furi_notify(handler, handler->record->value, handler->record->size); |     furi_notify(handler, handler->record->value, handler->record->size); | ||||||
|  |     furi_give(handler); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool furi_read(FuriRecordSubscriber* handler, void* value, size_t size) { | bool furi_read(FuriRecordSubscriber* handler, void* value, size_t size) { | ||||||
| @ -227,8 +227,8 @@ bool furi_read(FuriRecordSubscriber* handler, void* value, size_t size) { | |||||||
| 
 | 
 | ||||||
|     furi_take(handler); |     furi_take(handler); | ||||||
|     memcpy(value, handler->record->value, size); |     memcpy(value, handler->record->value, size); | ||||||
|     furi_give(handler); |  | ||||||
|     furi_notify(handler, value, size); |     furi_notify(handler, value, size); | ||||||
|  |     furi_give(handler); | ||||||
| 
 | 
 | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| @ -272,17 +272,17 @@ bool furi_write(FuriRecordSubscriber* handler, const void* value, size_t size) { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     furi_take(handler); | ||||||
|     if(handler->record->value != NULL) { |     if(handler->record->value != NULL) { | ||||||
|         // real write to value
 |         // real write to value
 | ||||||
|         furi_take(handler); |  | ||||||
|         memcpy(handler->record->value, value, size); |         memcpy(handler->record->value, value, size); | ||||||
|         furi_give(handler); |  | ||||||
| 
 | 
 | ||||||
|         // notify subscribers
 |         // notify subscribers
 | ||||||
|         furi_notify(handler, handler->record->value, handler->record->size); |         furi_notify(handler, handler->record->value, handler->record->size); | ||||||
|     } else { |     } else { | ||||||
|         furi_notify(handler, value, size); |         furi_notify(handler, value, size); | ||||||
|     } |     } | ||||||
|  |     furi_give(handler); | ||||||
| 
 | 
 | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Vadim Kaushan
						Vadim Kaushan