Needs Suggestion
How can I increase the stack depth limit ? Is it only by modifying the
postgres.conf file, but there I cannot increase the stack depth beyond 4
MB.
Actually, my problem is that, when I set the stack base address of the
child thread using the POSIX library function "pthread_setstackaddr()", I
am unable to access the memory contents of its parent. The data-structures
in the parent are either getting destroyed or unaccessible when moving to
the context of the child thread.
But when I create the child thread without setting its stack base address
then it is able to access the parent's memory contents. But if the child
thread's code size is large then it is getting stack fault and displaying
the message "MAX stack depth limit reached ...".
Can anyone give any reason why is that so ?
OR
If I cannot set the child thread's stack base address. Then How can I
increase the stack depth limit to a large value ?
--
Thank You,
Subham Roy.
On 22/09/10 11:14, subham@cse.iitb.ac.in wrote:
How can I increase the stack depth limit ? Is it only by modifying the
postgres.conf file, but there I cannot increase the stack depth beyond 4
MB.Actually, my problem is that, when I set the stack base address of the
child thread using the POSIX library function "pthread_setstackaddr()", I
am unable to access the memory contents of its parent. The data-structures
in the parent are either getting destroyed or unaccessible when moving to
the context of the child thread.
It is not a good idea to use threads in server code. PostgreSQL server
code is not thread-safe, things will break.
Assuming that you're not actually doing that but using threads in the
client instead, max_stack_depth should have no effect on you as it only
affects the server.
But you really should find another way to communicate between threads.
Stacks should be treated as thread-private. Use malloc() or something
and global variables.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
Actually, I used palloc() to set the stack base address.
And I am trying to create only a single thread, then also it is causing
problem.
Actually, I created all the data-structures using palloc(), then I am
passing these to the child thread. Even if I make these variables global
then also it is not working.
But if I don't set its stack address then it is working. But I need to do
that because when my thread body is big then it is causing stack fault.
So if I cannot set its stack address then Can I increase the stack depth
limit to a large value ?
--
Thank You,
Subham Roy.
Show quoted text
On 22/09/10 11:14, subham@cse.iitb.ac.in wrote:
How can I increase the stack depth limit ? Is it only by modifying the
postgres.conf file, but there I cannot increase the stack depth beyond 4
MB.Actually, my problem is that, when I set the stack base address of the
child thread using the POSIX library function "pthread_setstackaddr()",
I
am unable to access the memory contents of its parent. The
data-structures
in the parent are either getting destroyed or unaccessible when moving
to
the context of the child thread.It is not a good idea to use threads in server code. PostgreSQL server
code is not thread-safe, things will break.Assuming that you're not actually doing that but using threads in the
client instead, max_stack_depth should have no effect on you as it only
affects the server.But you really should find another way to communicate between threads.
Stacks should be treated as thread-private. Use malloc() or something
and global variables.--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
On 22/09/10 12:03, subham@cse.iitb.ac.in wrote:
Actually, I used palloc() to set the stack base address.
And I am trying to create only a single thread, then also it is causing
problem.
Actually, I created all the data-structures using palloc(), then I am
passing these to the child thread. Even if I make these variables global
then also it is not working.
But if I don't set its stack address then it is working. But I need to do
that because when my thread body is big then it is causing stack fault.
So if I cannot set its stack address then Can I increase the stack depth
limit to a large value ?
It's not clear what you're trying to do, but it's just not going to
work. The backend code is not thread-safe, so you can't safely create
any threads in server code. Not even a single one. And even if you
could, you should not mess with stack base addresses.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
So, Can I increase the stack depth limit to a large value ?
On 22/09/10 12:03, subham@cse.iitb.ac.in wrote:
Actually, I used palloc() to set the stack base address.
And I am trying to create only a single thread, then also it is causing
problem.
Actually, I created all the data-structures using palloc(), then I am
passing these to the child thread. Even if I make these variables global
then also it is not working.
But if I don't set its stack address then it is working. But I need to
do
that because when my thread body is big then it is causing stack fault.
So if I cannot set its stack address then Can I increase the stack depth
limit to a large value ?It's not clear what you're trying to do, but it's just not going to
work. The backend code is not thread-safe, so you can't safely create
any threads in server code. Not even a single one. And even if you
could, you should not mess with stack base addresses.--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
--
Thank You,
Subham Roy.
subham@cse.iitb.ac.in writes:
How can I increase the stack depth limit ? Is it only by modifying the
postgres.conf file, but there I cannot increase the stack depth beyond 4
MB.
Actually, my problem is that, when I set the stack base address of the
child thread using the POSIX library function "pthread_setstackaddr()", I
am unable to access the memory contents of its parent.
You've got worse problems than the stack depth limit. Creating multiple
threads inside a backend process is entirely unsupported and just about
guaranteed to result in massive breakage. Don't do it.
regards, tom lane
On 09/22/2010 05:03 AM, subham@cse.iitb.ac.in wrote:
Actually, I used palloc() to set the stack base address.
And I am trying to create only a single thread, then also it is causing
problem.
Did you not understand when people told you this wasn't going to work?
Don't create any threads.
cheers
andrew