igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] releasing the GIL in the python extension


From: Chris Wj
Subject: Re: [igraph] releasing the GIL in the python extension
Date: Sun, 20 Sep 2009 11:41:52 -0400

Right, gotcha. Makes sense to me now. Thanks Tamas.

On Sun, Sep 20, 2009 at 11:37 AM, Tamas Nepusz <address@hidden> wrote:
So, would the following scenario result in memory corruption if the GIL was released?:

in python, create graph,
make a full copy of the graph (not a weakref),
in thread 1, with first graph, calculate something
in thread 2 with the copy of the graph, calculate something
thread 1 calculation fails,
error function/destructor is called, ...

thread 2's graph (the copy) gets freed?
Nope. The data structures created _during_ the calculation would possibly be freed in thread 2 (not the copy of the graph itself). So, for instance, let us assume that you are calculating betweenness centrality. Betweenness centrality requires a few temporary vectors to store partial result. What happens is:

1. In thread 1, the calculation starts with the first graph

2. Thread 1 allocates the temporary vectors and pushes the memory addresses down the stack

3. In thread 2, the calculation starts with the second graph

4. Thread 2 allocates the temporary vectors and pushes the memory addresses down the stack

5. Thread 1 finishes the calculation. Since thread 1 knows that it pushed, say, two addresses down the stack (for the temporary vectors -- this is just an example, so the numbers may be arbitrary), it pops the topmost two memory addresses from the stack. These addresses happen to belong to thread 2 since those were pushed later, so thread 1 could happily free the memory address that is being used by thread 2.


--
Tamas



_______________________________________________
igraph-help mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/igraph-help


reply via email to

[Prev in Thread] Current Thread [Next in Thread]