1+ /* ------------------------------------------------------------------------
2+ *
3+ * pl_funcs.c
4+ *Utility C functions for stored procedures
5+ *
6+ * Copyright (c) 2015-2016, Postgres Professional
7+ *
8+ * ------------------------------------------------------------------------
9+ */
110#include "pathman.h"
211#include "utils/lsyscache.h"
312#include "utils/typcache.h"
@@ -29,13 +38,13 @@ PG_FUNCTION_INFO_V1( get_max_range_value );
2938Datum
3039on_partitions_created (PG_FUNCTION_ARGS )
3140{
32- LWLockAcquire (load_config_lock ,LW_EXCLUSIVE );
41+ LWLockAcquire (pmstate -> load_config_lock ,LW_EXCLUSIVE );
3342
3443/* Reload config */
3544/* TODO: reload just the specified relation */
3645load_relations_hashtable (false);
3746
38- LWLockRelease (load_config_lock );
47+ LWLockRelease (pmstate -> load_config_lock );
3948
4049PG_RETURN_NULL ();
4150}
@@ -51,10 +60,10 @@ on_partitions_updated(PG_FUNCTION_ARGS)
5160prel = get_pathman_relation_info (relid ,NULL );
5261if (prel != NULL )
5362{
54- LWLockAcquire (load_config_lock ,LW_EXCLUSIVE );
63+ LWLockAcquire (pmstate -> load_config_lock ,LW_EXCLUSIVE );
5564remove_relation_info (relid );
5665load_relations_hashtable (false);
57- LWLockRelease (load_config_lock );
66+ LWLockRelease (pmstate -> load_config_lock );
5867}
5968
6069PG_RETURN_NULL ();
@@ -65,13 +74,13 @@ on_partitions_removed(PG_FUNCTION_ARGS)
6574{
6675Oid relid ;
6776
68- LWLockAcquire (load_config_lock ,LW_EXCLUSIVE );
77+ LWLockAcquire (pmstate -> load_config_lock ,LW_EXCLUSIVE );
6978
7079/* parent relation oid */
7180relid = DatumGetInt32 (PG_GETARG_DATUM (0 ));
7281remove_relation_info (relid );
7382
74- LWLockRelease (load_config_lock );
83+ LWLockRelease (pmstate -> load_config_lock );
7584
7685PG_RETURN_NULL ();
7786}
@@ -129,10 +138,10 @@ find_or_create_range_partition(PG_FUNCTION_ARGS)
129138Oid child_oid ;
130139
131140/* Lock config before appending new partitions */
132- LWLockAcquire (load_config_lock ,LW_EXCLUSIVE );
141+ LWLockAcquire (pmstate -> load_config_lock ,LW_EXCLUSIVE );
133142
134143/* Restrict concurrent partition creation */
135- LWLockAcquire (edit_partitions_lock ,LW_EXCLUSIVE );
144+ LWLockAcquire (pmstate -> edit_partitions_lock ,LW_EXCLUSIVE );
136145
137146/*
138147 * Check if someone else has already created partition.
@@ -141,8 +150,8 @@ find_or_create_range_partition(PG_FUNCTION_ARGS)
141150pos = range_binary_search (rangerel ,& cmp_func ,value ,& found );
142151if (found )
143152{
144- LWLockRelease (edit_partitions_lock );
145- LWLockRelease (load_config_lock );
153+ LWLockRelease (pmstate -> edit_partitions_lock );
154+ LWLockRelease (pmstate -> load_config_lock );
146155PG_RETURN_OID (ranges [pos ].child_oid );
147156}
148157
@@ -155,8 +164,8 @@ find_or_create_range_partition(PG_FUNCTION_ARGS)
155164// elog(WARNING, "Worker finished");
156165
157166/* Release locks */
158- LWLockRelease (edit_partitions_lock );
159- LWLockRelease (load_config_lock );
167+ LWLockRelease (pmstate -> edit_partitions_lock );
168+ LWLockRelease (pmstate -> load_config_lock );
160169
161170/* Repeat binary search */
162171ranges = dsm_array_get_pointer (& rangerel -> ranges );
@@ -361,17 +370,13 @@ check_overlap(PG_FUNCTION_ARGS)
361370Datum
362371acquire_partitions_lock (PG_FUNCTION_ARGS )
363372{
364- // int relid = DatumGetInt32(PG_GETARG_DATUM(0));
365- // LockRelationOid(relid, AccessExclusiveLock);
366- LWLockAcquire (edit_partitions_lock ,LW_EXCLUSIVE );
373+ LWLockAcquire (pmstate -> edit_partitions_lock ,LW_EXCLUSIVE );
367374PG_RETURN_NULL ();
368375}
369376
370377Datum
371378release_partitions_lock (PG_FUNCTION_ARGS )
372379{
373- // int relid = DatumGetInt32(PG_GETARG_DATUM(0));
374- // UnlockRelationOid(relid, AccessExclusiveLock);
375- LWLockRelease (edit_partitions_lock );
380+ LWLockRelease (pmstate -> edit_partitions_lock );
376381PG_RETURN_NULL ();
377382}