This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Harry Chen wrote: > > Hi Anne > > > > > First, I'm guessing you are using pqinsert to insert products into your > > queue. Is that correct? > > yes > > > > > I'm going to make some guesses about your problem. As you probably > > know, this is the pq.c code that is failing: > > > > /* > > * XDR Encode or Decode "prod" to or from "buf" of size "size". > > */ > > static ptrdiff_t > > xproduct(void *buf, size_t size, enum xdr_op op, product *prod) > > { > > XDR xdrs[1] ; > > xdrmem_create(xdrs, buf, (u_int)size, op); > > > > if (!xdr_product(xdrs, prod)) > > { > > uerror("xproduct: %s xdr_product() failed\n", > > prod->info.ident); > > return 0; > > } > > > > /* return xlen_product(prod) ; */ > > return (xdrs->x_private - xdrs->x_base); > > } > > > > I'm wondering if the call to xdrmem_create is failing. Perhaps there's > > not enough memory to write the data. Or perhaps the 'size' variable is > > Actually the data size is 0, I just write the pattern of pqact.conf > with the data file path into the pq as a text string. so the size would > not longer than 256 byte. > > > bad from being cast to an unsigned int. The return value of that > > function really should be tested. > I add some code to write out the pq_insert() status, it show me as below > some time. > > Sep 14 07:15:51 mscsv3 /usr/local/ldm/logs[27206]: pq_insert: > /usr/local/ldm/dat > a/ldm.pq: I/O error > > or some time like this. > > Sep 13 09:27:26 mscsv3 /usr/local/ldm/logs[3440]: assertion > "pIf(xdrs->x_op == X > DR_ENCODE, *cpp != NULL && **cpp != 0)" failed: file "ldm_xdr.c", line > 21 > > > > > > > Are you able to modify the code, rebuild it, and test these things, or > > run the code in a debugger? > > I worte the function code, referred from the ldm util, outside the ldm > source tree. > > > > Also, what version of the LDM are you running? And, what hardware and > > operating system are you using? > ldm-5.0.5 on DEC Alpha 4100 OSF1 V4.2 > > Hope I can fix the issue this weekend, we have launched the typhoon > warning here. > > Thank you Hi Harry, We are currently at version 5.1.4 of the LDM. We haven't used 5.0.5 for years, and we no longer support it. Also, I'm having a difficult time understanding what you are doing. It appears that you have written your own code, based on pqutil, that inserts 0 length products into the queue with special product headers that cause pqact to invoke routines to operate on files somewhere. Is this accurate? In my question from my previous email I was asking if you were using the LDM program 'pqinsert', not the library routine 'pq_insert'. I see that you are using 'pq_insert' but now I do not think that you are using 'pqinsert'. I'm sorry to say that under these circumstances, a very old LDM version coupled with your own custom software, I can't be of much help. I strongly encourage you to get the newest version of the LDM. Using our recommended file structure, you should be able to install it, test it, and simply change a pointer if you want to go back to your older version. It's possible that your problem could be fixed by a newer version, but I can't say for sure that it will. Have you upgraded your operating system recently? Perhaps there's an incompatibility in the XDR library with your old LDM version. I'm sorry that I cannot be of further help on this particular problem. If you have further questions please let me know. Good luck. Anne -- *************************************************** Anne Wilson UCAR Unidata Program address@hidden P.O. Box 3000 Boulder, CO 80307 ---------------------------------------------------- Unidata WWW server http://www.unidata.ucar.edu/ ****************************************************