transport.py 文件源码

python
阅读 32 收藏 0 点赞 0 评论 0

项目:pyspresso 作者: CrowdStrike 项目源码 文件源码
def _send_shmem(self, bytes):
        # Use the outgoing stream and the outgoing shared memory.
        stream = self._streams.outgoing
        shared_memory = self._shared_memory.outgoing

        index = 0

        # Send bytes via circular buffer.
        with self.Mutex(stream.mutex) as mutex:
            while index < len(bytes):
                while shared_memory.isFull:
                    if ctypes.windll.kernel32.ReleaseMutex(stream.mutex) == 0:
                        raise WindowsError("Could not release mutex")
                    self._wait_for_object(stream.hasSpace)
                    self._wait_for_object(stream.mutex)

                fragment_start = shared_memory.writeOffset
                max_length = (shared_memory.readOffset if fragment_start < shared_memory.readOffset else 5000)- fragment_start
                fragment_length = min(max_length, len(bytes) - index)
                ctypes.memmove(ctypes.addressof(shared_memory.buffer) + fragment_start, bytes[index:index+fragment_length], fragment_length)
                shared_memory.writeOffset = (fragment_start + fragment_length) % 5000
                index += fragment_length
                shared_memory.isFull = (shared_memory.readOffset == shared_memory.writeOffset)
                if ctypes.windll.kernel32.SetEvent(stream.hasData) == 0:
                    raise WindowsError("Could not set event")
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号