0ac5ad5 started to compress infomask bits in WAL records. Unfortunately
 the replay routines for XLOG_HEAP_LOCK/XLOG_HEAP2_LOCK_UPDATED forgot to
 reset the HEAP_XMAX_INVALID (and some other) hint bits. 
 Luckily that's not problematic in the majority of cases, because after a
 crash/on a standby row locks aren't meaningful. Unfortunately that does
 not hold true in the presence of prepared transactions. This means that
 after a crash, or after promotion, row level locks held by a prepared,
 but not yet committed, prepared transaction might not be enforced. 
 Discussion: 
20160715192319.ubfuzim4zv3rqnxv@alap3.anarazel.de
 Backpatch: 9.3, the oldest branch on which 
0ac5ad5 is present.  
   
           
         htup = (HeapTupleHeader) PageGetItem(page, lp);
  
 +       htup->t_infomask &= ~(HEAP_XMAX_BITS | HEAP_MOVED);
 +       htup->t_infomask2 &= ~HEAP_KEYS_UPDATED;
         fix_infomask_from_infobits(xlrec->infobits_set, &htup->t_infomask,
                                    &htup->t_infomask2);
  
   
         htup = (HeapTupleHeader) PageGetItem(page, lp);
  
 +       htup->t_infomask &= ~(HEAP_XMAX_BITS | HEAP_MOVED);
 +       htup->t_infomask2 &= ~HEAP_KEYS_UPDATED;
         fix_infomask_from_infobits(xlrec->infobits_set, &htup->t_infomask,
                                    &htup->t_infomask2);
         HeapTupleHeaderSetXmax(htup, xlrec->xmax);