Ejemplo n.º 1
0
 static DbRetVal AppRecoverWrapFast(DB_ENV* evp, ref DBT logrec, DB_LSN* lsnp, DB_RECOPS op) {
   Env env = null;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     CallbackStatus cs = env.appRecoverFast(env, ref logrec, lsnp, (RecoveryOps)op);
     return cs == CallbackStatus.Success ? DbRetVal.SUCCESS : DbRetVal.APP_RECOVER_FAILED;
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "TxnRecover");
     return DbRetVal.APP_RECOVER_FAILED;
   }
 }
Ejemplo n.º 2
0
 static void PanicCallWrapCLS(DB_ENV* evp, int errval) {
   Env env = null;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     env.panicCallCLS(env, errval);
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "Panic Call");
     if (env != null)
       env.Error((int)DbRetVal.PANICCALL_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.PANICCALL_FAILED, null);
   }
 }
Ejemplo n.º 3
0
 void SetAppDispatch(DB_ENV.AppRecoverFcn value) {
   IntPtr txRec = IntPtr.Zero;
   if (value != null)
     txRec = Marshal.GetFunctionPointerForDelegate(value);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->SetAppDispatch(evp, txRec);
   }
   Util.CheckRetVal(ret);
 }
Ejemplo n.º 4
0
 void SetThreadIdString(DB_ENV.ThreadIdStringFcn value) {
   IntPtr ti = IntPtr.Zero;
   if (value != null)
     ti = Marshal.GetFunctionPointerForDelegate(value);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->SetThreadIdString(evp, ti);
   }
   Util.CheckRetVal(ret);
 }
Ejemplo n.º 5
0
 static DbRetVal PageOutWrapCLS(DB_ENV* evp, UInt32 pgno, void* pgaddr, ref DBT pgcookie) {
   Env env = null;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     CallbackStatus cs = PageInOutWrapCLS(env, pgno, pgaddr, ref pgcookie, env.pageOutCLS);
     return cs == CallbackStatus.Success ? DbRetVal.SUCCESS : DbRetVal.PAGE_OUT_FAILED;
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "PageOut");
     return DbRetVal.PAGE_OUT_FAILED;
   }
 }
Ejemplo n.º 6
0
 static void EventNotifyWrapCLS(DB_ENV* evp, UInt32 evnt, void* event_info) {
   Env env = null;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     object eventInfo = null;
     if (evnt == DbConst.DB_EVENT_REP_NEWMASTER)
       eventInfo = *((int*)event_info);
     env.eventNotifyCLS(env, (EventType)evnt, eventInfo);
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "Event Notification");
     if (env != null)
       env.Error((int)DbRetVal.EVENT_NOTIFY_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.EVENT_NOTIFY_FAILED, null);
   }
 }
Ejemplo n.º 7
0
 static int IsAliveWrapCLS(DB_ENV* evp, int pid, UInt32 tid, UInt32 flags) {
   Env env = null;
   bool result;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     result = env.isAliveCLS(env, pid, unchecked((int)tid), unchecked((IsAliveFlags)flags));
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "IsAlive");
     if (env != null)
       env.Error((int)DbRetVal.ISALIVE_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.ISALIVE_FAILED, null);
     result = false;
   }
   return result ? 1 : 0;
 }
Ejemplo n.º 8
0
 static void MsgCallWrapFast(DB_ENV* evp, byte* msg) {
   try {
     Env env = (Env)((GCHandle)evp->api_internal).Target;
     ((MsgCallFastFcn)env.msgCallProcessor)(env, msg);
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "Message Call");
   }
 }
Ejemplo n.º 9
0
    static void MsgCallWrapCLS(DB_ENV* evp, byte* msg) {
      try {
        Env env = (Env)((GCHandle)evp->api_internal).Target;
        UTF8Encoding utf8 = new UTF8Encoding();
        string message;
        lock (env.callBackLock) {
          // build msg string
          int size = Util.PtrToBuffer(msg, ref env.callBackBuffer1);
          message = utf8.GetString(env.callBackBuffer1, 0, size);

          // call CLS compliant delegate - we assume it is not null
          ((MsgCallFcn)env.msgCallProcessor)(env, message);
        }
      }
      catch (Exception ex) {
        Trace.WriteLine(ex.Message, "Message Call");
      }
    }
Ejemplo n.º 10
0
    static void ErrCallWrapStream(DB_ENV* evp, byte* errpfx, byte* msg) {
      try {
        Env env = (Env)((GCHandle)evp->api_internal).Target;

        int pfxSize = Util.ByteStrLen(errpfx);
        int msgSize = Util.ByteStrLen(msg);
        // add necessary space for ": " and line break
        int size;
        if (pfxSize > 0)
          size = pfxSize + 2 + msgSize + utf8nl.Length;
        else
          size = msgSize + utf8nl.Length;

        lock (env.callBackLock) {
          // copy into byte buffer
          if (size > env.callBackBuffer1.Length)
            env.callBackBuffer1 = new byte[size];
          if (errpfx != null) {
            Marshal.Copy((IntPtr)errpfx, env.callBackBuffer1, 0, pfxSize);
            env.callBackBuffer1[pfxSize++] = (byte)':';
            env.callBackBuffer1[pfxSize++] = (byte)' ';
          }
          if (msg != null) {
            Marshal.Copy((IntPtr)msg, env.callBackBuffer1, pfxSize, msgSize);
            pfxSize += msgSize;
          }
          // add line break
          for (int indx = 0; indx < utf8nl.Length; indx++)
            env.callBackBuffer1[pfxSize++] = utf8nl[indx];

          // write to error stream
          ((Stream)env.errCallProcessor).Write(env.callBackBuffer1, 0, size);
        }
      }
      catch (Exception ex) {
        Trace.WriteLine(ex.Message, "Error Call");
      }
    }
Ejemplo n.º 11
0
 void SetMsgCall(DB_ENV.MsgCallFcn value) {
   IntPtr msgCall = IntPtr.Zero;
   if (value != null)
     msgCall = Marshal.GetFunctionPointerForDelegate(value);
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     evp->SetMsgCall(evp, msgCall);
   }
 }
Ejemplo n.º 12
0
 static DbRetVal RepSendWrapCLS(
   DB_ENV* evp,
   ref DBT control,
   ref DBT rec,
   DB_LSN* lsnp,
   int envid,
   uint flags)
 {
   Env env = null;
   try {
     env = Util.GetEnv(evp);
     lock (env.callBackLock) {
       // construct DbEntry for control
       int size = unchecked((int)control.size);
       if (size > env.callBackBuffer1.Length)
         env.callBackBuffer1 = new byte[size];
       Marshal.Copy((IntPtr)control.data, env.callBackBuffer1, 0, size);
       DbEntry ctrlEntry = DbEntry.InOut(env.callBackBuffer1, 0, size);
       // construct DbEntry for rec
       size = unchecked((int)rec.size);
       if (size > env.callBackBuffer2.Length)
         env.callBackBuffer2 = new byte[size];
       Marshal.Copy((IntPtr)rec.data, env.callBackBuffer2, 0, size);
       DbEntry recEntry = DbEntry.InOut(env.callBackBuffer2, 0, size);
       // construct Lsn
       Lsn? lsn;
       if (lsnp == null) lsn = null; else lsn = new Lsn(*lsnp);
       // call CLS compliant delegate - we assume it is not null
       CallbackStatus cs = env.repSendCLS(
         env, ref ctrlEntry, ref recEntry, lsn, envid, unchecked((RepSendFlags)flags));
       return cs == CallbackStatus.Success ? DbRetVal.SUCCESS : DbRetVal.REPSEND_FAILED;
     }
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "RepSend");
     if (env != null)
       env.Error((int)DbRetVal.REPSEND_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.REPSEND_FAILED, null);
     return DbRetVal.REPSEND_FAILED;
   }
 }
Ejemplo n.º 13
0
 static DbRetVal RepSendWrapFast(
   DB_ENV* evp, 
   ref DBT control,
   ref DBT rec,
   DB_LSN* lsnp,
   int envid,
   uint flags)
 {
   Env env = null;
   try {
     env = Util.GetEnv(evp);
     CallbackStatus cs = env.repSendFast(
       env, ref control, ref rec, lsnp, envid, unchecked((RepSendFlags)flags));
     return cs == CallbackStatus.Success ? DbRetVal.SUCCESS : DbRetVal.REPSEND_FAILED;
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "RepSend");
     if (env != null)
       env.Error((int)DbRetVal.REPSEND_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.REPSEND_FAILED, null);
     return DbRetVal.REPSEND_FAILED;
   }
 }
Ejemplo n.º 14
0
    void RepSetTransport(int envId, DB_ENV.RepSendFcn value) {
      IntPtr repSnd = IntPtr.Zero;
      if (value != null)
        repSnd = Marshal.GetFunctionPointerForDelegate(value);
      DbRetVal ret;
      lock (rscLock) {
        DB_ENV* evp = CheckDisposed();
#if BDB_4_3_29
        ret = evp->SetRepTransport(evp, envId, repSnd);
#endif
#if BDB_4_5_20
        ret = evp->RepSetTransport(evp, envId, repSnd);
#endif
      }
      Util.CheckRetVal(ret);
    }
Ejemplo n.º 15
0
    static DbRetVal AppRecoverWrapCLS(DB_ENV* evp, ref DBT logrec, DB_LSN* lsnp, DB_RECOPS op) {
      Env env = null;
      try {
        env = (Env)((GCHandle)evp->api_internal).Target;

        // construct DbEntry for log_rec
        int size = unchecked((int)logrec.size);
        // we are not using a shared buffer - the call-back might take
        // a long time and we do not want to lock the buffer that long
        byte[] buffer = new byte[size];
        Marshal.Copy((IntPtr)logrec.data, buffer, 0, size);
        DbEntry logEntry = DbEntry.InOut(buffer, 0, size);
        logEntry.dbt.flags = logrec.flags;
        logEntry.dbt.dlen = logrec.dlen;
        logEntry.dbt.doff = logrec.doff;
        // construct Lsn
        Lsn? lsn;
        if (lsnp == null) lsn = null; else lsn = new Lsn(*lsnp);
        // call CLS compliant delegate - we assume it is not null
        CallbackStatus cs =  env.appRecoverCLS(env, ref logEntry, lsn, (RecoveryOps)op);
        return cs == CallbackStatus.Success ? DbRetVal.SUCCESS : DbRetVal.APP_RECOVER_FAILED;
      }
      catch (Exception ex) {
        Trace.WriteLine(ex.Message, "TxnRecover");
        return DbRetVal.APP_RECOVER_FAILED;
      }
    }
Ejemplo n.º 16
0
    static void MsgCallWrapStream(DB_ENV* evp, byte* msg) {
      try {
        Env env = (Env)((GCHandle)evp->api_internal).Target;

        int msgSize = Util.ByteStrLen(msg);
        // add necessary space for line break
        int size = msgSize + utf8nl.Length;
        lock (env.callBackLock) {
          // copy into byte buffer
          if (size > env.callBackBuffer1.Length)
            env.callBackBuffer1 = new byte[size];
          if (msg != null)
            Marshal.Copy((IntPtr)msg, env.callBackBuffer1, 0, msgSize);
          // add line break
          for (int indx = 0; indx < utf8nl.Length; indx++)
            env.callBackBuffer1[msgSize++] = utf8nl[indx];

          // write to message stream
          ((Stream)env.msgCallProcessor).Write(env.callBackBuffer1, 0, size);
        }
      }
      catch (Exception ex) {
        Trace.WriteLine(ex.Message, "Message Call");
      }
    }
Ejemplo n.º 17
0
 void SetEventNotify(DB_ENV.EventNotifyFcn value) {
   IntPtr en = IntPtr.Zero;
   if (value != null)
     en = Marshal.GetFunctionPointerForDelegate(value);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->SetEventNotify(evp, en);
   }
   Util.CheckRetVal(ret);
 }
Ejemplo n.º 18
0
 void SetFeedback(DB_ENV.FeedbackFcn value) {
   IntPtr fb = IntPtr.Zero;
   if (value != null)
     fb = Marshal.GetFunctionPointerForDelegate(value);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->SetFeedback(evp, fb);
   }
   Util.CheckRetVal(ret);
 }
Ejemplo n.º 19
0
 void SetIsAlive(DB_ENV.IsAliveFcn value) {
   IntPtr ial = IntPtr.Zero;
   if (value != null)
     ial = Marshal.GetFunctionPointerForDelegate(value);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->SetIsAlive(evp, ial);
   }
   Util.CheckRetVal(ret);
 }
Ejemplo n.º 20
0
 static void FeedbackWrapCLS(DB_ENV* evp, int opcode, int percent) {
   Env env = null;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     env.feedbackCLS(env, opcode, percent);
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "Feedback");
     if (env != null)
       env.Error((int)DbRetVal.FEEDBACK_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.FEEDBACK_FAILED, null);
   }
 }
Ejemplo n.º 21
0
 static void ThreadIdWrapCLS(DB_ENV* evp, out int pid, out UInt32 tid) {
   Env env = null;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     int tidCLS;
     env.threadIdCLS(env, out pid, out tidCLS);
     tid = unchecked((UInt32)tidCLS);
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "ThreadId");
     if (env != null)
       env.Error((int)DbRetVal.THREADID_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.THREADID_FAILED, null);
     pid = 0;
     tid = 0;
   }
 }
Ejemplo n.º 22
0
 void SetPanicCall(DB_ENV.PanicCallFcn value) {
   IntPtr pc = IntPtr.Zero;
   if (value != null)
     pc = Marshal.GetFunctionPointerForDelegate(value);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->SetPanicCall(evp, pc);
   }
   Util.CheckRetVal(ret);
 }
Ejemplo n.º 23
0
 static byte* ThreadIdStringWrapCLS(DB_ENV* evp, int pid, UInt32 tid, byte* buf) {
   Env env = null;
   int count = 0;
   try {
     env = (Env)((GCHandle)evp->api_internal).Target;
     string tidStr = env.threadIdStringCLS(env, pid, unchecked((int)tid));
     fixed (char* tidChars = tidStr) {
       count = new UTF8Encoding().GetBytes(tidChars, tidStr.Length, buf, DbConst.DB_THREADID_STRLEN - 1);
     }
   }
   catch (Exception ex) {
     Trace.WriteLine(ex.Message, "ThreadIdString");
     if (env != null)
       env.Error((int)DbRetVal.THREADID_STRING_FAILED, ex.Message);
     else
       evp->Err(evp, (int)DbRetVal.THREADID_STRING_FAILED, null);
   }
   buf[count] = 0;
   return buf;
 }
Ejemplo n.º 24
0
 void CacheRegister(int fType, DB_ENV.PageInOutFcn pageIn, DB_ENV.PageInOutFcn pageOut) {
   IntPtr pgIn = IntPtr.Zero;
   if (pageIn != null)
     pgIn = Marshal.GetFunctionPointerForDelegate(pageIn);
   IntPtr pgOut = IntPtr.Zero;
   if (pageOut != null)
     pgOut = Marshal.GetFunctionPointerForDelegate(pageOut);
   DbRetVal ret;
   lock (rscLock) {
     DB_ENV* evp = CheckDisposed();
     ret = evp->MemPoolRegister(evp, fType, pgIn, pgOut);
   }
   Util.CheckRetVal(ret);
 }