dsmStatus_t dsmBlobPut( dsmContext_t *pcontext, /* IN database context */ dsmBlob_t *pBlob, /* IN blob descriptor */ dsmText_t *pName) /* IN reference name for messages */ { dsmStatus_t returnCode = DSM_S_BLOBLIMIT; TRACE_CB(pcontext, "dsmBlobPut"); pcontext->pdbcontext->inservice++; /* "post-pone" signal handling while in DSM API */ SETJMP_ERROREXIT(pcontext, returnCode) /* Ensure error exit address set */ returnCode = dsmThreadSafeEntry(pcontext); if (DSM_S_SUCCESS == returnCode) { returnCode = dbBlobPut(pcontext, pBlob, pName); } else { returnCode = dsmEntryProcessError(pcontext, returnCode, (TEXT *)"dsmBlobPut"); } #ifdef DSM_BLOB_PUT_TEST MSGD_CALLBACK(pcontext, "%LdsmBlobPut: maxLength = %l", pBlob->maxLength); MSGD_CALLBACK(pcontext, "%LdsmBlobPut: segLength = %l", pBlob->segLength); MSGD_CALLBACK(pcontext, "%LdsmBlobPut: totLength = %l", pBlob->totLength); #endif done: dsmThreadSafeExit(pcontext); pcontext->pdbcontext->inservice--; return returnCode; } /* end dsmBlobPut */
/* PROGRAM: dbXAinit - Initialize the global xid free list * * * RETURNS: DSM_S_SUCCESS on success */ dsmStatus_t dbxaInit(dsmContext_t *pcontext) { dbcontext_t *pdbcontext = pcontext->pdbcontext; dbshm_t *pdbshm = pdbcontext->pdbpub; LONG maxxids,amount; int i; dbxaTransaction_t *pxids, *plastxid = NULL; if (!pdbshm->maxxids) return 0; amount = pdbshm->maxxids; for(pdbshm->maxxids = 0; pdbshm->maxxids < amount; pdbshm->maxxids += 64 ) { /* Allocate the xids in chunks of 64 */ pxids = (dbxaTransaction_t *) stGet(pcontext, XSTPOOL(pdbcontext, pdbshm->qdbpool), 64 * sizeof(dbxaTransaction_t)); if(!pxids) { MSGD_CALLBACK(pcontext, "%gInsuffient storage to allocate xid table."); } if(plastxid) { /* Make last of previous batch of 64 point to this batch */ plastxid->qnextXID = P_TO_QP(pcontext,pxids); } if(!pdbshm->qxidFree) { pdbshm->qxidFree = P_TO_QP(pcontext,pxids); } for(i = 0; i < 64;i++,pxids++) { QSELF(pxids) = P_TO_QP(pcontext,pxids); pxids->qnextXID = P_TO_QP(pcontext,pxids + 1); } plastxid = pxids--; plastxid->qnextXID = 0; } return 0; }