@ -621,7 +621,8 @@ add_reloption(relopt_gen *newoption)
* ( for types other than string )
*/
static relopt_gen *
allocate_reloption ( bits32 kinds , int type , const char * name , const char * desc )
allocate_reloption ( bits32 kinds , int type , const char * name , const char * desc ,
LOCKMODE lockmode )
{
MemoryContext oldcxt ;
size_t size ;
@ -658,13 +659,7 @@ allocate_reloption(bits32 kinds, int type, const char *name, const char *desc)
newoption - > kinds = kinds ;
newoption - > namelen = strlen ( name ) ;
newoption - > type = type ;
/*
* Set the default lock mode for this option . There is no actual way
* for a module to enforce it when declaring a custom relation option ,
* so just use the highest level , which is safe for all cases .
*/
newoption - > lockmode = AccessExclusiveLock ;
newoption - > lockmode = lockmode ;
MemoryContextSwitchTo ( oldcxt ) ;
@ -676,12 +671,13 @@ allocate_reloption(bits32 kinds, int type, const char *name, const char *desc)
* Add a new boolean reloption
*/
void
add_bool_reloption ( bits32 kinds , const char * name , const char * desc , bool default_val )
add_bool_reloption ( bits32 kinds , const char * name , const char * desc ,
bool default_val , LOCKMODE lockmode )
{
relopt_bool * newoption ;
newoption = ( relopt_bool * ) allocate_reloption ( kinds , RELOPT_TYPE_BOOL ,
name , desc ) ;
name , desc , lockmode ) ;
newoption - > default_val = default_val ;
add_reloption ( ( relopt_gen * ) newoption ) ;
@ -693,12 +689,12 @@ add_bool_reloption(bits32 kinds, const char *name, const char *desc, bool defaul
*/
void
add_int_reloption ( bits32 kinds , const char * name , const char * desc , int default_val ,
int min_val , int max_val )
int min_val , int max_val , LOCKMODE lockmode )
{
relopt_int * newoption ;
newoption = ( relopt_int * ) allocate_reloption ( kinds , RELOPT_TYPE_INT ,
name , desc ) ;
name , desc , lockmode ) ;
newoption - > default_val = default_val ;
newoption - > min = min_val ;
newoption - > max = max_val ;
@ -712,12 +708,12 @@ add_int_reloption(bits32 kinds, const char *name, const char *desc, int default_
*/
void
add_real_reloption ( bits32 kinds , const char * name , const char * desc , double default_val ,
double min_val , double max_val )
double min_val , double max_val , LOCKMODE lockmode )
{
relopt_real * newoption ;
newoption = ( relopt_real * ) allocate_reloption ( kinds , RELOPT_TYPE_REAL ,
name , desc ) ;
name , desc , lockmode ) ;
newoption - > default_val = default_val ;
newoption - > min = min_val ;
newoption - > max = max_val ;
@ -736,7 +732,7 @@ add_real_reloption(bits32 kinds, const char *name, const char *desc, double defa
*/
void
add_string_reloption ( bits32 kinds , const char * name , const char * desc , const char * default_val ,
validate_string_relopt validator )
validate_string_relopt validator , LOCKMODE lockmode )
{
relopt_string * newoption ;
@ -745,7 +741,7 @@ add_string_reloption(bits32 kinds, const char *name, const char *desc, const cha
( validator ) ( default_val ) ;
newoption = ( relopt_string * ) allocate_reloption ( kinds , RELOPT_TYPE_STRING ,
name , desc ) ;
name , desc , lockmode ) ;
newoption - > validate_cb = validator ;
if ( default_val )
{