@@ -1615,83 +1615,89 @@ def __Setup10(self):
16151615
16161616 return (1 )
16171617
1618- def __cbMain (self , cb , priv = None ):
1618+
1619+ def __Dispatch10 (self , cb , priv = None ):
16191620 self ._cb = cb
16201621 self ._priv = priv
1621- if not self .vslq :
1622- # Reconnect VSM
1623- time .sleep (0.1 )
1624- if self .lva .VSM_Open (self .vsm ):
1625- self .lva .VSM_ResetError (self .vsm )
1626- return (1 )
1627- c = self .lva .VSL_CursorVSM (
1628- self .vsl , self .vsm ,
1629- self .defi .VSL_COPT_TAIL | self .defi .VSL_COPT_BATCH )
1630- if not c :
1631- self .lva .VSM_ResetError (self .vsm )
1622+ while True :
1623+ if not self .vslq :
1624+ # Reconnect VSM
1625+ time .sleep (0.1 )
1626+ if self .lva .VSM_Open (self .vsm ):
1627+ self .lva .VSM_ResetError (self .vsm )
1628+ return (1 )
1629+ c = self .lva .VSL_CursorVSM (
1630+ self .vsl , self .vsm ,
1631+ self .defi .VSL_COPT_TAIL | self .defi .VSL_COPT_BATCH )
1632+ if not c :
1633+ self .lva .VSM_ResetError (self .vsm )
1634+ self .lva .VSM_Close (self .vsm )
1635+ return (1 )
1636+ self .vslq = self .lva .VSLQ_New (
1637+ self .vsl , c , self .__g_arg , self .__q_arg )
1638+ self .error = 'Log reacquired'
1639+ i = self .lva .VSLQ_Dispatch (
1640+ self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1641+
1642+ if i == 1 :
1643+ continue
1644+ elif i > - 2 :
1645+ return i
1646+ if not self .vsm :
1647+ return i
1648+
1649+ self .lva .VSLQ_Flush (self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1650+ self .lva .VSLQ_Delete (byref (cast (self .vslq , c_void_p )))
1651+ self .vslq = None
1652+ if i == - 2 :
1653+ self .error = "Log abandoned"
1654+ #self.lva.VSM_Destroy(POINTER(self.vsm))
16321655 self .lva .VSM_Close (self .vsm )
1633- return (1 )
1634- self .vslq = self .lva .VSLQ_New (
1635- self .vsl , c , self .__g_arg , self .__q_arg )
1636- self .error = 'Log reacquired'
1637- i = self .lva .VSLQ_Dispatch (
1638- self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1639- return (i )
1640-
1641- def __Dispatch10 (self , cb , priv = None ):
1642- i = self .__cbMain (cb , priv )
1643- if i > - 2 :
1656+ if i < - 2 :
1657+ self .error = "Log overrun"
16441658 return i
1645- if not self .vsm :
1646- return i
1647-
1648- self .lva .VSLQ_Flush (self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1649- self .lva .VSLQ_Delete (byref (cast (self .vslq , c_void_p )))
1650- self .vslq = None
1651- if i == - 2 :
1652- self .error = "Log abandoned"
1653- #self.lva.VSM_Destroy(POINTER(self.vsm))
1654- self .lva .VSM_Close (self .vsm )
1655- if i < - 2 :
1656- self .error = "Log overrun"
1657- return i
16581659
16591660 def __Dispatch20 (self , cb , priv = None ):
1660- if self .vsm :
1661- stat = self .lva .VSM_Status (self .vsm )
1662- if stat & self .defi .VSM_WRK_RESTARTED :
1661+ self ._cb = cb
1662+ self ._priv = priv
1663+ while True :
1664+ if self .vsm :
1665+ stat = self .lva .VSM_Status (self .vsm )
1666+ if stat & self .defi .VSM_WRK_RESTARTED :
1667+ if self .hascursor < 1 :
1668+ self .error = "Log abandoned"
1669+ self .lva .VSLQ_SetCursor (self .vslq , None )
1670+ self .hascursor = 0
16631671 if self .hascursor < 1 :
1664- self .error = "Log abandoned"
1665- self .lva .VSLQ_SetCursor (self .vslq , None )
1666- self .hascursor = 0
1667- if self .hascursor < 1 :
1668- time .sleep (0.1 )
1669- c = self .lva .VSL_CursorVSM (self .vsl , self .vsm , self .cursor_opt )
1670- if c == None :
1671- self .lva .VSL_ResetError (self .vsl )
1672- return 0
1673- if self .hascursor == 0 :
1674- self .error = "Log reacquired"
1675- self .hascursor = 1
1676- self .lva .VSLQ_SetCursor (self .vslq , byref (cast (c , c_void_p )))
1677-
1678-
1679- i = self .__cbMain (cb , priv )
1680-
1681- if i > - 2 :
1682- return i
1683- if not self .vsm :
1672+ time .sleep (0.1 )
1673+ c = self .lva .VSL_CursorVSM (self .vsl , self .vsm , self .cursor_opt )
1674+ if c == None :
1675+ self .lva .VSL_ResetError (self .vsl )
1676+ return 0
1677+ if self .hascursor == 0 :
1678+ self .error = "Log reacquired"
1679+ self .hascursor = 1
1680+ self .lva .VSLQ_SetCursor (self .vslq , byref (cast (c , c_void_p )))
1681+
1682+ i = self .lva .VSLQ_Dispatch (
1683+ self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1684+
1685+ if i == 1 :
1686+ continue
1687+ elif i > - 2 :
1688+ return i
1689+ if not self .vsm :
1690+ return i
1691+
1692+ self .lva .VSLQ_Flush (self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1693+ if i == - 2 :
1694+ self .error = "Log abandoned"
1695+ self .hascursor = 0
1696+ self .lva .VSLQ_SetCursor (self .vslq , None )
1697+ if i < - 2 :
1698+ self .error = "Log overrun"
16841699 return i
16851700
1686- self .lva .VSLQ_Flush (self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1687- if i == - 2 :
1688- self .error = "Log abandoned"
1689- self .hascursor = 0
1690- self .lva .VSLQ_SetCursor (self .vslq , None )
1691- if i < - 2 :
1692- self .error = "Log overrun"
1693- return i
1694-
16951701 def Dispatch (self , cb , priv = None ):
16961702 if self .lva .apiversion >= 2.0 :
16971703 return self .__Dispatch20 (cb , priv )
0 commit comments