最近,一台机器从一个较旧的Ubuntu版本升级/重新安装到了最新的Debian版本。从那以后,我在我编写的一个应用程序中得到了一个segfault,它将数据发送到一个icecast守护进程。你知道吗
经过一番搜索,我把重点放在线程上。只要我从内的线程调用shout.send
,就会得到一个segfault。下面是一段复制错误的最小代码。你知道吗
错误发生在最后的第二行(icy_handle.send(chunk)
)
我在跑步:
老实说,我有点难堪。经过大约4个小时的颠簸,我已经失去了主意。我还没有尝试设置一台代表旧Ubuntu环境的旧机器。我也不记得Ubuntu的确切版本了。我想是12点04分,但我不确定。但我知道它是在那个系统上运行的。顺便说一下:硬件没有变化!你知道吗
有什么想法吗?你知道吗
示例代码:
from threading import Thread
import shout
class Player(Thread):
def __init__(self, filename, *args, **kwargs):
super(Player, self).__init__(*args, **kwargs)
self.filename = filename
def run(self):
icy_handle = shout.Shout()
icy_handle.format = 'mp3'
icy_handle.audio_info = {
"bitrate": str(128),
"samplerate": str(44100),
"channels": str(1)}
icy_handle.user = "source"
icy_handle.name = "test stream"
icy_handle.url = "http://stream.example.com"
icy_handle.password = "password123"
icy_handle.mount = "/test.mp3"
icy_handle.port = 8000
icy_handle.open()
chunk_size = 1024
with open(self.filename, 'rb') as afile:
chunk = afile.read(chunk_size)
while chunk:
icy_handle.send(chunk)
icy_handle.sync()
chunk = afile.read(chunk_size)
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print """
USAGE: %s <filename>
""" % sys.argv[0]
sys.exit(1)
p = Player(sys.argv[1])
p.start()
p.join()
我可以用0.2.1重现您的问题,但不能用trunk。 请尝试:
我很确定这是相关的解决方案:
https://trac.xiph.org/changeset/19174
我们应该发布一个新版本。让我接着说。(JFTR,这将涉及到我将存储库从SVN迁移到git,因此上述URL在这个特定范围之外变得无效)
相关问题 更多 >
编程相关推荐