config/link.py
author Narcis Beleuzu <nbeleuzu@mozilla.com>
Fri, 15 Dec 2017 02:16:50 +0200
changeset 396515 d0d709880f192e88d1601b657cd562a6fe56d4aa
parent 316424 22d95521160beb0c26e6dcee7c979e0cb617bb56
permissions -rw-r--r--
Backed out 7 changesets (bug 1377007) for web platform reftests failures on CSS2/borders. r=backout Backed out changeset c30bc5d5adbc (bug 1377007) Backed out changeset 33fdf9e531e2 (bug 1377007) Backed out changeset 267abdb38036 (bug 1377007) Backed out changeset 4a452c3ac115 (bug 1377007) Backed out changeset e9310960c9e6 (bug 1377007) Backed out changeset 8e5e61dfbbaf (bug 1377007) Backed out changeset 9ac83e79e656 (bug 1377007)

# 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:]))