static PHP_METHOD(swoole_msgqueue, push) { char *data; size_t length; long type = 1; if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &data, &length, &type) == FAILURE) { RETURN_FALSE; } swQueue_data *in = (swQueue_data *) emalloc(length + sizeof(long) + 1); in->mtype = type; memcpy(in->mdata, data, length + 1); swMsgQueue *queue = swoole_get_object(getThis()); int ret = swMsgQueue_push(queue, in, length); efree(in); SW_CHECK_RETURN(ret); }
int swWorker_send2worker(swWorker *dst_worker, void *buf, int n, int flag) { int pipefd, ret; if (flag & SW_PIPE_MASTER) { pipefd = dst_worker->pipe_master; } else { pipefd = dst_worker->pipe_worker; } //message-queue if (dst_worker->pool->use_msgqueue) { struct { long mtype; swEventData buf; } msg; msg.mtype = dst_worker->id + 1; memcpy(&msg.buf, buf, n); return swMsgQueue_push(dst_worker->pool->queue, (swQueue_data *) &msg, n); } if ((flag & SW_PIPE_NONBLOCK) && SwooleG.main_reactor) { return SwooleG.main_reactor->write(SwooleG.main_reactor, pipefd, buf, n); } else { ret = swSocket_write_blocking(pipefd, buf, n); } return ret; }