make callbacks return early when canceling
even after driver->cancel() the store may complete commands successfully. return early in this case, so we don't attempt to continue syncing.
This commit is contained in:
		
							parent
							
								
									ea951a697f
								
							
						
					
					
						commit
						424e0e7221
					
				
					 1 changed files with 9 additions and 5 deletions
				
			
		
							
								
								
									
										14
									
								
								src/sync.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								src/sync.c
									
										
									
									
									
								
							| 
						 | 
					@ -246,6 +246,11 @@ msg_fetched( int sts, void *aux )
 | 
				
			||||||
	switch (sts) {
 | 
						switch (sts) {
 | 
				
			||||||
	case DRV_OK:
 | 
						case DRV_OK:
 | 
				
			||||||
		INIT_SVARS(vars->aux);
 | 
							INIT_SVARS(vars->aux);
 | 
				
			||||||
 | 
							if (check_cancel( svars )) {
 | 
				
			||||||
 | 
								free( vars->data.data );
 | 
				
			||||||
 | 
								vars->cb( SYNC_CANCELED, 0, vars );
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vars->msg->flags = vars->data.flags;
 | 
							vars->msg->flags = vars->data.flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -482,16 +487,15 @@ check_ret( int sts, void *aux )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	DECL_SVARS;
 | 
						DECL_SVARS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (sts) {
 | 
						if (sts == DRV_CANCELED)
 | 
				
			||||||
	case DRV_CANCELED:
 | 
					 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	case DRV_BOX_BAD:
 | 
						INIT_SVARS(aux);
 | 
				
			||||||
		INIT_SVARS(aux);
 | 
						if (sts == DRV_BOX_BAD) {
 | 
				
			||||||
		svars->ret |= SYNC_FAIL;
 | 
							svars->ret |= SYNC_FAIL;
 | 
				
			||||||
		cancel_sync( svars );
 | 
							cancel_sync( svars );
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return check_cancel( svars );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SVARS_CHECK_RET \
 | 
					#define SVARS_CHECK_RET \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue