apr_status_t h2_mplx_out_write(h2_mplx *m, int stream_id, ap_filter_t* f, apr_bucket_brigade *bb, apr_table_t *trailers, struct apr_thread_cond_t *iowait) { apr_status_t status; int acquired; AP_DEBUG_ASSERT(m); if ((status = enter_mutex(m, &acquired)) == APR_SUCCESS) { h2_io *io = h2_io_set_get(m->stream_ios, stream_id); if (io && !io->orphaned) { status = out_write(m, io, f, bb, trailers, iowait); ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, m->c, "h2_mplx(%ld-%d): write with trailers=%s", m->id, io->id, trailers? "yes" : "no"); H2_MPLX_IO_OUT(APLOG_TRACE2, m, io, "h2_mplx_out_write"); have_out_data_for(m, stream_id); } else { status = APR_ECONNABORTED; } leave_mutex(m, acquired); } return status; }
static bool on_write(void *data, int fd, uint32_t active_flags) { struct subprocess_data *mdata = data; int err = 0; if (active_flags & SOL_FD_FLAGS_ERR) err = -EBADF; else err = out_write(mdata); if (err < 0) { uint16_t i; struct write_data *w; SOL_VECTOR_FOREACH_IDX (&mdata->write_data, w, i) sol_blob_unref(w->blob); sol_vector_clear(&mdata->write_data); } if (mdata->write_data.len == 0) { mdata->watches.out = NULL; return false; } return true; }
static apr_status_t out_open(h2_mplx *m, int stream_id, h2_response *response, ap_filter_t* f, apr_bucket_brigade *bb, struct apr_thread_cond_t *iowait) { apr_status_t status = APR_SUCCESS; h2_io *io = h2_io_set_get(m->stream_ios, stream_id); if (io && !io->orphaned) { if (f) { ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, "h2_mplx(%ld-%d): open response: %d, rst=%d", m->id, stream_id, response->http_status, response->rst_error); } h2_io_set_response(io, response); h2_io_set_add(m->ready_ios, io); if (response && response->http_status < 300) { /* we might see some file buckets in the output, see * if we have enough handles reserved. */ check_tx_reservation(m); } if (bb) { status = out_write(m, io, f, bb, response->trailers, iowait); } have_out_data_for(m, stream_id); } else { status = APR_ECONNABORTED; } return status; }
apr_status_t h2_mplx_out_write(h2_mplx *m, int stream_id, ap_filter_t* f, apr_bucket_brigade *bb, struct apr_thread_cond_t *iowait) { apr_status_t status; AP_DEBUG_ASSERT(m); if (m->aborted) { return APR_ECONNABORTED; } status = apr_thread_mutex_lock(m->lock); if (APR_SUCCESS == status) { if (!m->aborted) { h2_io *io = h2_io_set_get(m->stream_ios, stream_id); if (io) { status = out_write(m, io, f, bb, iowait); have_out_data_for(m, stream_id); if (m->aborted) { return APR_ECONNABORTED; } } else { status = APR_ECONNABORTED; } } if (m->lock) { apr_thread_mutex_unlock(m->lock); } } return status; }
static apr_status_t out_open(h2_mplx *m, int stream_id, h2_response *response, ap_filter_t* f, apr_bucket_brigade *bb, struct apr_thread_cond_t *iowait) { apr_status_t status = APR_SUCCESS; h2_io *io = h2_io_set_get(m->stream_ios, stream_id); if (io) { if (f) { ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, f->c, "h2_mplx(%ld-%d): open response: %s", m->id, stream_id, response->status); } io->response = h2_response_copy(io->pool, response); h2_io_set_add(m->ready_ios, io); if (bb) { status = out_write(m, io, f, bb, iowait); } have_out_data_for(m, stream_id); } else { status = APR_ECONNABORTED; } return status; }
apr_status_t h2_mplx_out_write(h2_mplx *m, int stream_id, ap_filter_t* f, apr_bucket_brigade *bb, apr_table_t *trailers, struct apr_thread_cond_t *iowait) { apr_status_t status; AP_DEBUG_ASSERT(m); if (m->aborted) { return APR_ECONNABORTED; } status = apr_thread_mutex_lock(m->lock); if (APR_SUCCESS == status) { if (!m->aborted) { h2_io *io = h2_io_set_get(m->stream_ios, stream_id); if (io && !io->orphaned) { status = out_write(m, io, f, bb, trailers, iowait); ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, m->c, "h2_mplx(%ld-%d): write with trailers=%s", m->id, io->id, trailers? "yes" : "no"); H2_MPLX_IO_OUT(APLOG_TRACE2, m, io, "h2_mplx_out_write"); have_out_data_for(m, stream_id); if (m->aborted) { return APR_ECONNABORTED; } } else { status = APR_ECONNABORTED; } } if (m->lock) { apr_thread_mutex_unlock(m->lock); } } return status; }
/** Output for one expression. */ void YicesSolver::out_expr(std::ostream &o, const SymbolicExpr::Ptr &tn) { SymbolicExpr::LeafPtr ln = tn->isLeafNode(); SymbolicExpr::InteriorPtr in = tn->isInteriorNode(); std::string subExprName; if (termNames.getOptional(tn).assignTo(subExprName)) { o <<subExprName; } else if (ln) { if (ln->isNumber()) { if (ln->nBits() <= 64) { o <<"(mk-bv " <<ln->nBits() <<" " <<ln->toInt() <<")"; } else { o <<"0b" <<ln->bits().toBinary(); } } else if (ln->isMemory()) { o <<"m" <<ln->nameId(); } else { ASSERT_require(ln->isVariable()); o <<"v" <<ln->nameId(); } } else { ASSERT_not_null(in); switch (in->getOperator()) { case SymbolicExpr::OP_ADD: out_la(o, "bv-add", in, false); break; case SymbolicExpr::OP_AND: out_la(o, "and", in, true); break; case SymbolicExpr::OP_ASR: out_asr(o, in); break; case SymbolicExpr::OP_BV_AND: out_la(o, "bv-and", in, true); break; case SymbolicExpr::OP_BV_OR: out_la(o, "bv-or", in, false); break; case SymbolicExpr::OP_BV_XOR: out_la(o, "bv-xor", in, false); break; case SymbolicExpr::OP_EQ: out_binary(o, "=", in); break; case SymbolicExpr::OP_CONCAT: out_la(o, "bv-concat", in); break; case SymbolicExpr::OP_EXTRACT: out_extract(o, in); break; case SymbolicExpr::OP_INVERT: out_unary(o, "bv-not", in); break; case SymbolicExpr::OP_ITE: out_ite(o, in); break; case SymbolicExpr::OP_LSSB: throw Exception("OP_LSSB not implemented"); case SymbolicExpr::OP_MSSB: throw Exception("OP_MSSB not implemented"); case SymbolicExpr::OP_NE: out_binary(o, "/=", in); break; case SymbolicExpr::OP_NEGATE: out_unary(o, "bv-neg", in); break; case SymbolicExpr::OP_NOOP: o<<"0b1"; break; case SymbolicExpr::OP_OR: out_la(o, "or", in, false); break; case SymbolicExpr::OP_READ: out_read(o, in); break; case SymbolicExpr::OP_ROL: throw Exception("OP_ROL not implemented"); case SymbolicExpr::OP_ROR: throw Exception("OP_ROR not implemented"); case SymbolicExpr::OP_SDIV: throw Exception("OP_SDIV not implemented"); case SymbolicExpr::OP_SET: out_set(o, in); break; case SymbolicExpr::OP_SEXTEND: out_sext(o, in); break; case SymbolicExpr::OP_SLT: out_binary(o, "bv-slt", in); break; case SymbolicExpr::OP_SLE: out_binary(o, "bv-sle", in); break; case SymbolicExpr::OP_SHL0: out_shift(o, "bv-shift-left", in, false); break; case SymbolicExpr::OP_SHL1: out_shift(o, "bv-shift-left", in, true); break; case SymbolicExpr::OP_SHR0: out_shift(o, "bv-shift-right", in, false); break; case SymbolicExpr::OP_SHR1: out_shift(o, "bv-shift-right", in, true); break; case SymbolicExpr::OP_SGE: out_binary(o, "bv-sge", in); break; case SymbolicExpr::OP_SGT: out_binary(o, "bv-sgt", in); break; case SymbolicExpr::OP_SMOD: throw Exception("OP_SMOD not implemented"); case SymbolicExpr::OP_SMUL: out_mult(o, in); break; case SymbolicExpr::OP_UDIV: throw Exception("OP_UDIV not implemented"); case SymbolicExpr::OP_UEXTEND: out_uext(o, in); break; case SymbolicExpr::OP_UGE: out_binary(o, "bv-ge", in); break; case SymbolicExpr::OP_UGT: out_binary(o, "bv-gt", in); break; case SymbolicExpr::OP_ULE: out_binary(o, "bv-le", in); break; case SymbolicExpr::OP_ULT: out_binary(o, "bv-lt", in); break; case SymbolicExpr::OP_UMOD: throw Exception("OP_UMOD not implemented"); case SymbolicExpr::OP_UMUL: out_mult(o, in); break; case SymbolicExpr::OP_WRITE: out_write(o, in); break; case SymbolicExpr::OP_ZEROP: out_zerop(o, in); break; } } }