@synchronized(lock)<EOL><INDENT>def ack(self, connection, frame, transaction=None):<DEDENT>
self.log.debug("<STR_LIT>" % (frame, connection))<EOL>if connection in self._pending:<EOL><INDENT>pending_frame = self._pending[connection]<EOL>if pending_frame.headers.get('<STR_LIT>') != frame.headers.get('<STR_LIT>'):<EOL><INDENT>self.log.warning(<EOL>"<STR_LIT>" % frame.message_id)<EOL>self.store.requeue(pending_frame.destination, pending_frame)<EOL><DEDENT>if transaction is not None:<EOL><INDENT>self._transaction_frames[connection][<EOL>transaction].append(pending_frame)<EOL><DEDENT>del self._pending[connection]<EOL>self._send_backlog(connection)<EOL><DEDENT>else:<EOL><INDENT>self.log.debug("<STR_LIT>" % connection)<EOL><DEDENT>
Acknowledge receipt of a message.

If the `transaction` parameter is non-null, the frame being ack'd
will be queued so that it can be requeued if the transaction
is rolled back. 

@param connection: The connection that is acknowledging the frame.
@type connection: L{coilmq.server.StompConnection}

@param frame: The frame being acknowledged.