Assertion rsample_is_singleton fails
Caused by the changes in a652ecb78e; the
sample that matters is the first in what may now be a chain of samples,
which requires some overlooked adjustments.
Signed-off-by: Erik Boasson <eb@ilities.com>
			
			
This commit is contained in:
		
							parent
							
								
									d494ba4eda
								
							
						
					
					
						commit
						774dae135b
					
				
					 3 changed files with 8 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -217,7 +217,7 @@ int nn_defrag_nackmap (struct nn_defrag *defrag, seqno_t seq, uint32_t maxfragnu
 | 
			
		|||
 | 
			
		||||
struct nn_reorder *nn_reorder_new (enum nn_reorder_mode mode, uint32_t max_samples);
 | 
			
		||||
void nn_reorder_free (struct nn_reorder *r);
 | 
			
		||||
struct nn_rsample *nn_reorder_rsample_dup (struct nn_rmsg *rmsg, struct nn_rsample *rsampleiv);
 | 
			
		||||
struct nn_rsample *nn_reorder_rsample_dup_first (struct nn_rmsg *rmsg, struct nn_rsample *rsampleiv);
 | 
			
		||||
struct nn_rdata *nn_rsample_fragchain (struct nn_rsample *rsample);
 | 
			
		||||
nn_reorder_result_t nn_reorder_rsample (struct nn_rsample_chain *sc, struct nn_reorder *reorder, struct nn_rsample *rsampleiv, int *refcount_adjust, int delivery_queue_full_p);
 | 
			
		||||
nn_reorder_result_t nn_reorder_gap (struct nn_rsample_chain *sc, struct nn_reorder *reorder, struct nn_rdata *rdata, seqno_t min, seqno_t maxp1, int *refcount_adjust);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1726,7 +1726,7 @@ static int reorder_try_append_and_discard (struct nn_reorder *reorder, struct nn
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct nn_rsample *nn_reorder_rsample_dup (struct nn_rmsg *rmsg, struct nn_rsample *rsampleiv)
 | 
			
		||||
struct nn_rsample *nn_reorder_rsample_dup_first (struct nn_rmsg *rmsg, struct nn_rsample *rsampleiv)
 | 
			
		||||
{
 | 
			
		||||
  /* Duplicates the rsampleiv without updating any reference counts:
 | 
			
		||||
     that is left to the caller, as they do not need to be updated if
 | 
			
		||||
| 
						 | 
				
			
			@ -1738,7 +1738,6 @@ struct nn_rsample *nn_reorder_rsample_dup (struct nn_rmsg *rmsg, struct nn_rsamp
 | 
			
		|||
     rsampleiv. */
 | 
			
		||||
  struct nn_rsample *rsampleiv_new;
 | 
			
		||||
  struct nn_rsample_chain_elem *sce;
 | 
			
		||||
  assert (rsample_is_singleton (&rsampleiv->u.reorder));
 | 
			
		||||
#ifndef NDEBUG
 | 
			
		||||
  {
 | 
			
		||||
    struct nn_rdata *d = rsampleiv->u.reorder.sc.first->fragchain;
 | 
			
		||||
| 
						 | 
				
			
			@ -1754,7 +1753,9 @@ struct nn_rsample *nn_reorder_rsample_dup (struct nn_rmsg *rmsg, struct nn_rsamp
 | 
			
		|||
  sce->fragchain = rsampleiv->u.reorder.sc.first->fragchain;
 | 
			
		||||
  sce->next = NULL;
 | 
			
		||||
  sce->sampleinfo = rsampleiv->u.reorder.sc.first->sampleinfo;
 | 
			
		||||
  *rsampleiv_new = *rsampleiv;
 | 
			
		||||
  rsampleiv_new->u.reorder.min = rsampleiv->u.reorder.min;
 | 
			
		||||
  rsampleiv_new->u.reorder.maxp1 = rsampleiv_new->u.reorder.min + 1;
 | 
			
		||||
  rsampleiv_new->u.reorder.n_samples = 1;
 | 
			
		||||
  rsampleiv_new->u.reorder.sc.first = rsampleiv_new->u.reorder.sc.last = sce;
 | 
			
		||||
  return rsampleiv_new;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2201,8 +2201,10 @@ static void handle_regular (struct receiver_state *rst, nn_etime_t tnow, struct
 | 
			
		|||
        nn_reorder_result_t rres2;
 | 
			
		||||
        if (wn->in_sync == PRMSS_SYNC)
 | 
			
		||||
          continue;
 | 
			
		||||
        /* only need to get a copy of the first sample, because that's the one
 | 
			
		||||
           that triggered delivery */
 | 
			
		||||
        if (!reuse_rsample_dup)
 | 
			
		||||
          rsample_dup = nn_reorder_rsample_dup (rmsg, rsample);
 | 
			
		||||
          rsample_dup = nn_reorder_rsample_dup_first (rmsg, rsample);
 | 
			
		||||
        rres2 = nn_reorder_rsample (&sc, wn->u.not_in_sync.reorder, rsample_dup, &refc_adjust, nn_dqueue_is_full (pwr->dqueue));
 | 
			
		||||
        switch (rres2)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue