From b572ae2a8bdd4adfc1641a43ca02061b9ae6eff9 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Thu, 17 Sep 2009 18:40:37 +0000 Subject: netrender: Disable windows' blocking crash reports in child process. (windows only) Get server port as well as ip address from master broadcast (broadcast is on a fixed port). --- release/io/netrender/master.py | 2 +- release/io/netrender/operators.py | 5 +++-- release/io/netrender/slave.py | 24 ++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/release/io/netrender/master.py b/release/io/netrender/master.py index 29cec4e2232..8f59ef37069 100644 --- a/release/io/netrender/master.py +++ b/release/io/netrender/master.py @@ -632,5 +632,5 @@ def runMaster(address, broadcast, path, update_stats, test_break): if broadcast: if time.time() - start_time >= 10: # need constant here print("broadcasting address") - s.sendto(bytes("%s:%i" % address, encoding='utf8'), 0, ('',address[1])) + s.sendto(bytes("%i" % address[1], encoding='utf8'), 0, ('', 8000)) start_time = time.time() diff --git a/release/io/netrender/operators.py b/release/io/netrender/operators.py index 928c2b9efaf..e6888731437 100644 --- a/release/io/netrender/operators.py +++ b/release/io/netrender/operators.py @@ -339,14 +339,15 @@ class netclientscan(bpy.types.Operator): s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.settimeout(30) - s.bind(('', netsettings.server_port)) + s.bind(('', 8000)) try: - buf, address = s.recvfrom(128) + buf, address = s.recvfrom(64) print("received:", buf) netsettings.server_address = address[0] + netsettings.server_port = int(str(buf, encoding='utf8')) except socket.timeout: print("no server info") diff --git a/release/io/netrender/slave.py b/release/io/netrender/slave.py index 3a4e77abc54..1f4ef3a3616 100644 --- a/release/io/netrender/slave.py +++ b/release/io/netrender/slave.py @@ -9,6 +9,22 @@ CANCEL_POLL_SPEED = 2 MAX_TIMEOUT = 10 INCREMENT_TIMEOUT = 1 +if platform.system() == 'Windows' and platform.version() >= '5': # Error mode is only available on Win2k or higher, that's version 5 + import ctypes + def SetErrorMode(): + val = ctypes.windll.kernel32.SetErrorMode(0x0002) + ctypes.windll.kernel32.SetErrorMode(val | 0x0002) + return val + + def RestoreErrorMode(val): + ctypes.windll.kernel32.SetErrorMode(val) +else: + def SetErrorMode(): + return 0 + + def RestoreErrorMode(val): + pass + def slave_Info(): sysname, nodename, release, version, machine, processor = platform.uname() slave = netrender.model.RenderSlave() @@ -100,10 +116,14 @@ def render_slave(engine, scene): for frame in job.frames: print("frame", frame.number) frame_args += ["-f", str(frame.number)] - + + + start_t = time.time() - process = subprocess.Popen([sys.argv[0], "-b", job_full_path, "-o", JOB_PREFIX + "######", "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + val = SetErrorMode() + process = subprocess.Popen([sys.argv[0], "-b", job_full_path, "-o", JOB_PREFIX + "######", "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + RestoreErrorMode(val) headers = {"job-id":job.id, "slave-id":slave_id} -- cgit v1.2.3