This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: My PyLucene app freezes when run as a daemon


Ofer Nave wrote:
Sorry, I should stated this explicitly:

I am running on linux 2.6.9.


The version does not really matter. You cannot call fork from within a libgcj based application and use it for much of anything other than exec.


If you want to daemonize, you should do it before calling Jv_RunMain.

David Daney

-ofer

-----Original Message-----
From: java-owner@gcc.gnu.org [mailto:java-owner@gcc.gnu.org] On Behalf Of Ofer Nave
Sent: Friday, March 23, 2007 2:24 PM
To: java@gcc.gnu.org
Subject: My PyLucene app freezes when run as a daemon


This might be a bit off the usual topic range here, but I was pointed to this list.

Background:

PyLucene is a GCJ-compiled version of Java Lucene integrated with Python.
http://pylucene.osafoundation.org/


Context:

I have a PyLucene searcher application running under a multithreaded python web server called Paste (http://pythonpaste.org). I've added a command-line argument to my script to run the script as a daemon based on the code in this article: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731

Problem:

When the script is run as a normal process, it works fine. When it is run as a daemon, it freezes after about a dozen requests. The point it's freezing at is in a call to a class that is known to not be thread-safe, so that might be the problem - but on the other hand, the only difference between the good and bad scenarios is whether it's running as a daemon, so I tend to lean towards that as my top clue.

How I Got Here:

I posted this to the PyLucene list, and was told: "You might want to ask java@gcc.gnu.org about daemonizing a process using libgcj and boehm-gc." So I'm giving it a shot. Does anyone have wisdom on the care and feeding of daemonized processes built with GCJ? Is there anything special I need to know about?

Appendix 1 - My daemonize() Function:

# call to detach yourself from a terminal def daemonize(logfile=None):
    # fork twice to sever any ties
    _fork()
    os.setsid()
    _fork()
    os.chdir(WORKDIR)
    os.umask(UMASK)

    # close standard I/O channels
    os.close(0)  # stdin
    os.close(1)  # stdout
    os.close(2)  # stderr

    # redirect standard output channels to logfile
    if logfile:
        sys.stdout = sys.stderr = logfile

    # set up SIGTERM handler for cleanup
    signal(SIGTERM, _sigterm_handler)

-ofer




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]