+ if (create_first_one)
+ {
+ BackendInstancePtr backend = bc->create_backend(package);
+ if (backend)
+ bc->release_backend(backend);
+ }
+ yazpp_1::GDU init_response;
+ {
+ boost::mutex::scoped_lock lock(bc->m_mutex_backend_class);
+
+ init_response = bc->m_init_response;
+ }
+
+ if (init_response.get())
+ {
+ Z_GDU *response_gdu = init_response.get();
+ mp::util::transfer_referenceId(odr, gdu->u.z3950,
+ response_gdu->u.z3950);
+ Z_InitResponse *init_res = response_gdu->u.z3950->u.initResponse;
+ Z_Options *server_options = init_res->options;
+ Z_Options *client_options = &frontend->m_init_options;
+ int i;
+ for (i = 0; i < 30; i++)
+ if (!ODR_MASK_GET(client_options, i))
+ ODR_MASK_CLEAR(server_options, i);
+
+ if (!m_preferredMessageSize ||
+ *init_res->preferredMessageSize > *req->preferredMessageSize)
+ *init_res->preferredMessageSize = *req->preferredMessageSize;
+
+ if (!m_maximumRecordSize ||
+ *init_res->maximumRecordSize > *req->maximumRecordSize)
+ *init_res->maximumRecordSize = *req->maximumRecordSize;
+
+ package.response() = init_response;
+ if (!*response_gdu->u.z3950->u.initResponse->result)
+ package.session().close();
+ }
+ else
+ {
+ Z_APDU *apdu =
+ odr.create_initResponse(
+ gdu->u.z3950, YAZ_BIB1_TEMPORARY_SYSTEM_ERROR,
+ "session_shared: target closed connection during init");
+ *apdu->u.initResponse->result = 0;
+ package.response() = apdu;
+ package.session().close();
+ }