X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Ffilter_record_transform.cpp;h=a7cb28c2df68c6c5261aff8b2730749b61e1de90;hb=056d8d0c4ee4b9e383463ecdde7aa84901909aa4;hp=f6ddac06c3a86e9b5eb63ab93c05aa3327e2351c;hpb=13ededc67712ac2ecb30677b016b3f6cf4ad4eab;p=metaproxy-moved-to-github.git diff --git a/src/filter_record_transform.cpp b/src/filter_record_transform.cpp index f6ddac0..a7cb28c 100644 --- a/src/filter_record_transform.cpp +++ b/src/filter_record_transform.cpp @@ -26,6 +26,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include +#include + #if HAVE_USEMARCON #include #include @@ -53,6 +55,8 @@ namespace metaproxy_1 { #if HAVE_USEMARCON struct info_usemarcon { + boost::mutex m_mutex; + char *stage1; char *stage2; @@ -64,6 +68,8 @@ static int convert_usemarcon(void *info, WRBUF record, WRBUF wr_error) { struct info_usemarcon *p = (struct info_usemarcon *) info; + boost::mutex::scoped_lock lock(p->m_mutex); + if (p->usemarcon1) { char *converted; @@ -108,7 +114,7 @@ static void destroy_usemarcon(void *info) delete p->usemarcon2; xfree(p->stage1); xfree(p->stage2); - xfree(p); + delete p; } static void *construct_usemarcon(const xmlNode *ptr, const char *path, @@ -118,7 +124,7 @@ static void *construct_usemarcon(const xmlNode *ptr, const char *path, if (strcmp((const char *) ptr->name, "usemarcon")) return 0; - struct info_usemarcon *p = (struct info_usemarcon *) xmalloc(sizeof(*p)); + struct info_usemarcon *p = new(struct info_usemarcon); p->stage1 = 0; p->stage2 = 0; p->usemarcon1 = 0; @@ -455,7 +461,7 @@ void yf::RecordTransform::Impl::process(mp::Package &package) const Z_NamePlusRecord *npr = records->records[i]; if (npr->which == Z_NamePlusRecord_databaseRecord) { - WRBUF output_record = wrbuf_alloc(); + mp::wrbuf output_record; Z_External *r = npr->u.databaseRecord; int ret_trans = 0; if (r->which == Z_External_OPAC) @@ -476,8 +482,8 @@ void yf::RecordTransform::Impl::process(mp::Package &package) const { npr->u.databaseRecord = z_ext_record_oid(odr_en, match_syntax, - wrbuf_buf(output_record), - wrbuf_len(output_record)); + output_record.buf(), + output_record.len()); } else { @@ -487,7 +493,6 @@ void yf::RecordTransform::Impl::process(mp::Package &package) const YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS, yaz_record_conv_get_error(rc)); } - wrbuf_destroy(output_record); } } package.response() = gdu_res;