@@ -621,7 +621,8 @@ add_reloption(relopt_gen *newoption)
621621 * (for types other than string)
622622 */
623623static relopt_gen *
624- allocate_reloption (bits32 kinds , int type , const char * name , const char * desc )
624+ allocate_reloption (bits32 kinds , int type , const char * name , const char * desc ,
625+ LOCKMODE lockmode )
625626{
626627 MemoryContext oldcxt ;
627628 size_t size ;
@@ -658,13 +659,7 @@ allocate_reloption(bits32 kinds, int type, const char *name, const char *desc)
658659 newoption -> kinds = kinds ;
659660 newoption -> namelen = strlen (name );
660661 newoption -> type = type ;
661-
662- /*
663- * Set the default lock mode for this option. There is no actual way
664- * for a module to enforce it when declaring a custom relation option,
665- * so just use the highest level, which is safe for all cases.
666- */
667- newoption -> lockmode = AccessExclusiveLock ;
662+ newoption -> lockmode = lockmode ;
668663
669664 MemoryContextSwitchTo (oldcxt );
670665
@@ -676,12 +671,13 @@ allocate_reloption(bits32 kinds, int type, const char *name, const char *desc)
676671 * Add a new boolean reloption
677672 */
678673void
679- add_bool_reloption (bits32 kinds , const char * name , const char * desc , bool default_val )
674+ add_bool_reloption (bits32 kinds , const char * name , const char * desc ,
675+ bool default_val , LOCKMODE lockmode )
680676{
681677 relopt_bool * newoption ;
682678
683679 newoption = (relopt_bool * ) allocate_reloption (kinds , RELOPT_TYPE_BOOL ,
684- name , desc );
680+ name , desc , lockmode );
685681 newoption -> default_val = default_val ;
686682
687683 add_reloption ((relopt_gen * ) newoption );
@@ -693,12 +689,12 @@ add_bool_reloption(bits32 kinds, const char *name, const char *desc, bool defaul
693689 */
694690void
695691add_int_reloption (bits32 kinds , const char * name , const char * desc , int default_val ,
696- int min_val , int max_val )
692+ int min_val , int max_val , LOCKMODE lockmode )
697693{
698694 relopt_int * newoption ;
699695
700696 newoption = (relopt_int * ) allocate_reloption (kinds , RELOPT_TYPE_INT ,
701- name , desc );
697+ name , desc , lockmode );
702698 newoption -> default_val = default_val ;
703699 newoption -> min = min_val ;
704700 newoption -> max = max_val ;
@@ -712,12 +708,12 @@ add_int_reloption(bits32 kinds, const char *name, const char *desc, int default_
712708 */
713709void
714710add_real_reloption (bits32 kinds , const char * name , const char * desc , double default_val ,
715- double min_val , double max_val )
711+ double min_val , double max_val , LOCKMODE lockmode )
716712{
717713 relopt_real * newoption ;
718714
719715 newoption = (relopt_real * ) allocate_reloption (kinds , RELOPT_TYPE_REAL ,
720- name , desc );
716+ name , desc , lockmode );
721717 newoption -> default_val = default_val ;
722718 newoption -> min = min_val ;
723719 newoption -> max = max_val ;
@@ -736,7 +732,7 @@ add_real_reloption(bits32 kinds, const char *name, const char *desc, double defa
736732 */
737733void
738734add_string_reloption (bits32 kinds , const char * name , const char * desc , const char * default_val ,
739- validate_string_relopt validator )
735+ validate_string_relopt validator , LOCKMODE lockmode )
740736{
741737 relopt_string * newoption ;
742738
@@ -745,7 +741,7 @@ add_string_reloption(bits32 kinds, const char *name, const char *desc, const cha
745741 (validator ) (default_val );
746742
747743 newoption = (relopt_string * ) allocate_reloption (kinds , RELOPT_TYPE_STRING ,
748- name , desc );
744+ name , desc , lockmode );
749745 newoption -> validate_cb = validator ;
750746 if (default_val )
751747 {
0 commit comments