ソースを参照

change modulecomm, add some save code.

yuchuli 1 年間 前
コミット
ff47dd6d72

+ 70 - 9
src/common/modulecomm/shm/procsm.cpp

@@ -235,7 +235,10 @@ int procsm::CreateASMPTR(char * strasmname,const unsigned int nBufSize,const uns
         }
         else
         {
-            std::cout<<"Attach "<<mstrsmname<<" Attach Fail."<<std::endl;
+            char strout[256];
+            snprintf(strout,256,"Fatal Error. Create %s, attach fail. %s is exist,but attach fail.",mstrsmname,mstrsmname);
+            std::cout<<strout<<std::endl;
+            savefatalerror(strout);
             return -1;
         }
     }
@@ -243,7 +246,10 @@ int procsm::CreateASMPTR(char * strasmname,const unsigned int nBufSize,const uns
     ASM_PTR * pasm = (ASM_PTR *)mpASMPtr->data();
     if(pasm == NULL)
     {
-        std::cout<<"ASM_PTR is NULL."<<std::endl;
+        char strout[256];
+        snprintf(strout,256,"%s  pasm is NULL.",mstrsmname);
+        std::cout<<strout<<std::endl;
+        savefatalerror(strout);
         return -1;
     }
     if(bSMExit == false)
@@ -286,8 +292,10 @@ int procsm::CreateAndAttachASM(char * strasmname,const unsigned int nBufSize,con
             char * p = (char *)mpASM->data();
             if(p == NULL)
             {
-                strout = "Fatal Error: Create " + std::string(strsmname) + " Fail. data is NULL";
-                ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
+                char strout2[256];
+                snprintf(strout2,256,"Fatal Error: Exist, attach ok, but data is NULL",strsmname);
+                savefatalerror(strout2);
+                ivstdcolorout(strout2,iv::STDCOLOR_BOLDRED);
                 return -1;
             }
             mpinfo = (procsm_info *)p;
@@ -312,7 +320,10 @@ int procsm::CreateAndAttachASM(char * strasmname,const unsigned int nBufSize,con
                 char * p = (char *)mpASM->data();
                 if(p == NULL)
                 {
-                    strout = "Fatal Error: ReCreate " + std::string(strsmname) + " Fail. data is NULL";
+                    strout = "Fatal Error: ReCreate " + std::string(strsmname) + " OK. but data is NULL";
+                    char strout2[256];
+                    snprintf(strout2,256,"%s",strout.data());
+                    savefatalerror(strout2);
                     ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
                     return -2;
                 }
@@ -329,7 +340,10 @@ int procsm::CreateAndAttachASM(char * strasmname,const unsigned int nBufSize,con
             }
             else
             {
-                strout = "Fatal Error: ReCreate " + std::string(strsmname) + " Fail.";
+                strout = "Fatal Error: Exist,attach fail, so  ReCreate " + std::string(strsmname) + " ,but Fail.";
+                char strout2[256];
+                snprintf(strout2,256,"%s",strout.data());
+                savefatalerror(strout2);
                 ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
                 return -5;
             }
@@ -343,6 +357,9 @@ int procsm::CreateAndAttachASM(char * strasmname,const unsigned int nBufSize,con
         {
             strout = "Fatal Error.Create SharedMemory Fail. " + std::string(strsmname) + " not exist. successfully create it, but data is NULL";
             ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
+            char strout2[256];
+            snprintf(strout2,256,"%s",strout.data());
+            savefatalerror(strout2);
             return -3;
         }
         mpASM->lock();
@@ -389,6 +406,9 @@ int procsm::CreateAndAttachASM(char * strasmname,const unsigned int nBufSize,con
         mbAttach = false;
         strout = "Fatal Error.Create SharedMemory Fail. " + std::string(strsmname) + " Attach Fail.";
         ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
+        char strout2[256];
+        snprintf(strout2,256,"%s",strout.data());
+        savefatalerror(strout2);
         return -4;
     }
 
@@ -537,6 +557,7 @@ bool procsm::AttachMem()
                     char strerr[256];
                     snprintf(strerr,256,"AttachMem  CreateAndAttachASMFail. error code: %d",nrtn);
                     ivstdcolorout(strerr,iv::STDCOLOR_BOLDRED);
+                    savefatalerror(strerr);
                     return false;
                 }
                 else
@@ -560,8 +581,9 @@ bool procsm::AttachMem()
         if(mnMode == ModeWrite)
         {
             char strout[256];
-            snprintf(strout,256,"%s  Attach ASMPtr Fail.",mstrsmname);
+            snprintf(strout,256," when AttachMem, %s  Attach ASMPtr Fail.",mstrsmname);
             ivstdcolorout(" AttachMem: Attach Fail. ",iv::STDCOLOR_BOLDYELLOW);
+            savefatalerror(strout);
         }
         return false;
     }
@@ -663,13 +685,30 @@ int procsm::writemsg(const char *str, const unsigned int nSize)
         }
         else
         {
+            static bool bsave = false;
+            if(bsave == false)
+            {
+                char strout[256];
+                snprintf(strout,256,"%s procsm::writemsg message size is very big.msg size is %d ",mstrsmname,nSize);
+                savefatalerror(strout);
+                bsave = true;
+            }
+
         qDebug("procsm::writemsg message size is very big");
         return -1;
         }
     }
     if(mbAttach == false)
     {
-        std::cout<<mstrsmname<<"ShareMemory Attach fail."<<std::endl;
+        static bool bsave = false;
+        if(bsave == false)
+        {
+            char strout[256];
+            snprintf(strout,256,"%s writemsg, ShareMemory Attach fail. ",mstrsmname);
+            savefatalerror(strout);
+            bsave = true;
+        }
+        std::cout<<mstrsmname<<"  ShareMemory Attach fail."<<std::endl;
         return -1;
     }
     mpASM->lock();
@@ -862,7 +901,7 @@ int procsm::readmsg(unsigned int index, char *str, unsigned int nMaxSize,unsigne
           //         qDebug("read pos = %d",(phh+nPos)->mnPos);
                    nRtn = (phh+nPos)->mnLen;
   //                 pdt->setDate(QDate(2030,1,1));
-                   const int nms_msgkeep = 3000; //message must in 3 seconds read.
+                   const int nms_msgkeep = 30000; //message must in 3 seconds read.
                    pdt->setMSecsSinceEpoch((phh+nPos)->sendtime/1000000);
 
                    int64_t nms_now = std::chrono::system_clock::now().time_since_epoch().count()/1000000;
@@ -884,3 +923,25 @@ int procsm::readmsg(unsigned int index, char *str, unsigned int nMaxSize,unsigne
     return nRtn;
 }
 
+
+void procsm::savefatalerror(char * strerr)
+{
+    QFile xFile;
+    int64_t nNow = std::chrono::system_clock::now().time_since_epoch().count();
+    char strfilename[256];
+    snprintf(strfilename,256,"%s/log/modulecomm_%ld.log",getenv("HOME"),nNow);
+    xFile.setFileName(strfilename);
+    if(xFile.open(QIODevice::ReadWrite))
+    {
+        xFile.write(strerr);
+        xFile.flush();
+    }
+    else
+    {
+        char strout[256];
+        snprintf(strout,256,"save error to file %s fail.",strfilename);
+        ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
+    }
+
+}
+

+ 2 - 0
src/common/modulecomm/shm/procsm.h

@@ -156,6 +156,8 @@ private:
     void setfailmark();
     bool checkfailmark(); //if have fail mark file,return true
 
+    void savefatalerror(char * strerr);
+
 
 
 };

+ 6 - 4
src/common/modulecomm/shm/procsm_if.cpp

@@ -163,10 +163,12 @@ void procsm_if_readthread::run()
                 if((nRtn == -2) ||(nRtn == -100)||(nRtn == -101))
                 {
                    index = mpPSM->getcurrentnext();
-                   if(nRtn == -100)  //Because New ShareMemory, read this.
-                   {
-                       if((index > 0)&&(bFirstRead == false) )index = index -1;
-                   }
+
+                   //comment next code, skip some message, when change asm.
+//                   if(nRtn == -100)  //Because New ShareMemory, read this.
+//                   {
+//                       if((index > 0)&&(bFirstRead == false) )index = index -1;
+//                   }
                 }
                 else
                 {