Ejemplo n.º 1
0
// Send a command to the protocol thread and
// wait for the command to complete
static rsRetVal _issue_command(threadIPC_t *ipc,
	                           pn_reactor_t *reactor,
	                           commands_t command,
	                           pn_message_t *message)
{
	DEFiRet;

	DBGPRINTF("omamqp1: Sending command %d to protocol thread\n", command);

	pthread_mutex_lock(&ipc->lock);

	if (message) {
	    assert(ipc->message == NULL);
	    ipc->message = message;
	}
	assert(ipc->command == COMMAND_DONE);
	ipc->command = command;
	pn_reactor_wakeup(reactor);
	while (ipc->command != COMMAND_DONE) {
	    pthread_cond_wait(&ipc->condition, &ipc->lock);
	}
	iRet = ipc->result;
	if (ipc->message) {
	    pn_decref(ipc->message);
	    ipc->message = NULL;
	}

	pthread_mutex_unlock(&ipc->lock);

	DBGPRINTF("omamqp1: Command %d completed, status=%d\n", command, iRet);
	RETiRet;
}
Ejemplo n.º 2
0
void reactor::wakeup() { pn_reactor_wakeup(pn_object()); }