config/link.py
author Enes Goktas <egoktas@mozilla.com>
Tue, 20 Sep 2016 17:58:34 -0700
changeset 316298 22d95521160beb0c26e6dcee7c979e0cb617bb56
parent 199754 ff64d9bbc03cd14dcd05d94f54a0e9c14f57b787
permissions -rw-r--r--
Bug 1303227 - Wrap libxul.so linker to prevent getting the linking process killed; r=glandium This patch removes the memory usage tracking in the script that wraps the linking of the xul library. This patch also generalizes the wrapping of the xul linking process to all platforms. MozReview-Commit-ID: HyncF3aVwdx

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import expandlibs_exec
import sys
import threading
import time

def periodically_print_status(proc):
    """
    Print something to the console every 20 minutes to prevent the build job
    from getting killed when linking a large binary.
    Check status of the linker every 0.5 seconds.
    """
    idleTime = 0
    while proc.returncode is None:
        time.sleep(0.5)
        idleTime += 0.5
        if idleTime > 20 * 60:
          print "Still linking, 20 minutes passed..."
          sys.stdout.flush()
          idleTime = 0

def wrap_linker(args):
    """
    Execute |args| and pass resulting |proc| object to a second thread that
    will track the status of the started |proc|.
    """

    # This needs to be a list in order for the callback to set the
    # variable properly with python-2's scoping rules.
    t = [None]
    def callback(proc):
        t[0] = threading.Thread(target=periodically_print_status,
                             args=(proc,))
        t[0].start()
    exitcode = expandlibs_exec.main(args, proc_callback=callback)
    # Wait for the background thread to finish.
    t[0].join()
    return exitcode

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print >>sys.stderr, "Usage: link.py <commandline>"
        sys.exit(1)
    sys.exit(wrap_linker(sys.argv[1:]))