Re: [PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-13 Thread Bruce Momjian
Thomas Hallgren wrote:
 Tom Lane wrote:
 
 Thomas Hallgren [EMAIL PROTECTED] writes:
   
 
 Here is a patch that will enable a module to change the stack_base_ptr 
 temporarilly during a call.
 
 
 
 I'm not really in favor of this ... I think you are trying to make the
 backend do something that will never work reliably.
 
 If we were to try to support this, I'd prefer to just make
 stack_base_ptr non static, rather than add overhead code.
 
  regards, tom lane
   
 
 Sure, that works for me.

Do we want to make this change for 8.1?

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-13 Thread Tom Lane
Bruce Momjian pgman@candle.pha.pa.us writes:
 Tom Lane wrote:
 I'm not really in favor of this ... I think you are trying to make the
 backend do something that will never work reliably.

 Do we want to make this change for 8.1?

I don't want to do it at all.  The justification given is to allow the
backend to support multithreading introduced by an add-on library, which
is a hopeless cause.  Removing static from that variable declaration
is surely a cheap enough change, but what about the next request, and
the one after that?

regards, tom lane

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-13 Thread Bruce Momjian
Tom Lane wrote:
 Bruce Momjian pgman@candle.pha.pa.us writes:
  Tom Lane wrote:
  I'm not really in favor of this ... I think you are trying to make the
  backend do something that will never work reliably.
 
  Do we want to make this change for 8.1?
 
 I don't want to do it at all.  The justification given is to allow the
 backend to support multithreading introduced by an add-on library, which
 is a hopeless cause.  Removing static from that variable declaration
 is surely a cheap enough change, but what about the next request, and
 the one after that?

Well, I have not seen the next request yet, but it seems harmless for a
useful extension to the database, namely PL/Java.  I do believe this is
one of the reasons PL/J took a different approach, though.

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org


Re: [PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-13 Thread Thomas Hallgren

Tom Lane wrote:

Bruce Momjian pgman@candle.pha.pa.us writes:
  

Tom Lane wrote:
  

I'm not really in favor of this ... I think you are trying to make the
backend do something that will never work reliably.



  

Do we want to make this change for 8.1?



I don't want to do it at all.  The justification given is to allow the
backend to support multithreading introduced by an add-on library, which
is a hopeless cause.  Removing static from that variable declaration
is surely a cheap enough change, but what about the next request, and
the one after that?
  
Tom, I don't request that the backend should support multiple threads 
simultaneously. It's one thread at a time. I can't think of a next 
request in this direction. I'm very aware that the backend is 
single-threaded and that you have no intention to change that. Neither do I.


Having the stack_base public is actually useful for another purpose 
also. It can allow you to make assertions that check if an abitrary 
pointer is 'on stack' or not. The MemoryContextContains() could be made 
safer too by just returning false when the given pointer is between the 
stack_base and the current stack_pointer. Perhaps that could be added to 
the patch?


Regards,
Thomas Hallgren



---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
  subscribe-nomail command to [EMAIL PROTECTED] so that your
  message can get through to the mailing list cleanly


[PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-02 Thread Thomas Hallgren
Here is a patch that will enable a module to change the stack_base_ptr 
temporarilly during a call. A background discussion can be found here:


http://www.mail-archive.com/pgsql-hackers@postgresql.org/msg64586.html

Regards,
Thomas Hallgren

Index: src/backend/tcop/postgres.c
===
RCS file: /projects/cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.463
diff -u -r1.463 postgres.c
--- src/backend/tcop/postgres.c 26 Sep 2005 15:51:12 -  1.463
+++ src/backend/tcop/postgres.c 2 Oct 2005 07:16:14 -
@@ -2285,6 +2285,27 @@
}
 }
 
+/*
+ * set_stack_base_ptr: Assign a new stack base pointer
+ *
+ * Modules that call on the backend code from a thread different then the
+ * main thread can use this function to temporarilly swap the stack base
+ * pointer during the call.
+ *
+ * NOTE! This does in no way mean that the backend code is thread-safe. It
+ * cannot run multiple threads simultaniously. The caller must ensure that
+ * only one thread at a time is calling, that the call is encapsulated in
+ * a PG_TRY/PG_CATCH, and that signal handlers are installed to cater for
+ * signals in other threads then main.
+ */
+char*
+set_stack_base_ptr(char* new_base_ptr)
+{
+   char* old_base_ptr = stack_base_ptr;
+   stack_base_ptr = new_base_ptr;
+   return old_base_ptr;
+}
+
 /* GUC assign hook to update max_stack_depth_bytes from max_stack_depth */
 bool
 assign_max_stack_depth(int newval, bool doit, GucSource source)
Index: src/include/miscadmin.h
===
RCS file: /projects/cvsroot/pgsql/src/include/miscadmin.h,v
retrieving revision 1.179
diff -u -r1.179 miscadmin.h
--- src/include/miscadmin.h 17 Aug 2005 22:14:34 -  1.179
+++ src/include/miscadmin.h 2 Oct 2005 07:16:15 -
@@ -216,6 +216,7 @@
 
 /* in tcop/postgres.c */
 extern void check_stack_depth(void);
+extern char* set_stack_base_ptr(char* new_base_ptr);
 
 
 /*

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-02 Thread Tom Lane
Thomas Hallgren [EMAIL PROTECTED] writes:
 Here is a patch that will enable a module to change the stack_base_ptr 
 temporarilly during a call.

I'm not really in favor of this ... I think you are trying to make the
backend do something that will never work reliably.

If we were to try to support this, I'd prefer to just make
stack_base_ptr non static, rather than add overhead code.

regards, tom lane

---(end of broadcast)---
TIP 5: don't forget to increase your free space map settings


Re: [PATCHES] Path to enable a module to change the stack_base_ptr

2005-10-02 Thread Thomas Hallgren

Tom Lane wrote:


Thomas Hallgren [EMAIL PROTECTED] writes:
 

Here is a patch that will enable a module to change the stack_base_ptr 
temporarilly during a call.
   



I'm not really in favor of this ... I think you are trying to make the
backend do something that will never work reliably.

If we were to try to support this, I'd prefer to just make
stack_base_ptr non static, rather than add overhead code.

regards, tom lane
 


Sure, that works for me.

Regards,
Thomas Hallgren



---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

  http://www.postgresql.org/docs/faq