Re: DTrace probe patch for OS X Leopard
| От | Robert Lor |
|---|---|
| Тема | Re: DTrace probe patch for OS X Leopard |
| Дата | |
| Msg-id | 47C72DBD.5060105@sun.com обсуждение исходный текст |
| Ответ на | Re: DTrace probe patch for OS X Leopard (Robert Lor <Robert.Lor@Sun.COM>) |
| Список | pgsql-patches |
Peter,
Robert Lor wrote:
> Peter Eisentraut wrote:
>> I have reworked your build rules so they look more like the idioms
>> that we already use for other similar cases. This should fix the
>> troubles you describe and others.
>>
> There are a couple of problems with your updated patch:
Based on your patch, I made a few changes and everything works now.
Patch attached!
Thanks for your help!
Regards,
-Robert
Index: src/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/Makefile,v
retrieving revision 1.42
diff -u -3 -p -r1.42 Makefile
--- src/Makefile 21 Aug 2007 01:11:12 -0000 1.42
+++ src/Makefile 28 Feb 2008 21:41:49 -0000
@@ -14,6 +14,9 @@ include Makefile.global
all install installdirs uninstall distprep:
+ifeq ($(enable_dtrace), yes)
+ $(MAKE) -C backend ../../src/include/utils/probes.h
+endif
$(MAKE) -C port $@
$(MAKE) -C timezone $@
$(MAKE) -C backend $@
Index: src/backend/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/Makefile,v
retrieving revision 1.127
diff -u -3 -p -r1.127 Makefile
--- src/backend/Makefile 26 Feb 2008 14:42:27 -0000 1.127
+++ src/backend/Makefile 28 Feb 2008 21:41:49 -0000
@@ -20,9 +20,11 @@ SUBDIRS = access bootstrap catalog parse
include $(srcdir)/common.mk
+ifeq ($(PORTNAME), solaris)
ifeq ($(enable_dtrace), yes)
LOCALOBJS += utils/probes.o
endif
+endif
OBJS = $(SUBDIROBJS) $(LOCALOBJS) $(top_builddir)/src/port/libpgport_srv.a
@@ -122,6 +124,9 @@ $(srcdir)/parser/parse.h: parser/gram.y
utils/fmgroids.h: utils/Gen_fmgrtab.sh $(top_srcdir)/src/include/catalog/pg_proc.h
$(MAKE) -C utils fmgroids.h
+utils/probes.h: utils/probes.d
+ $(MAKE) -C utils probes.h
+
# Make symlinks for these headers in the include directory. That way
# we can cut down on the -I options. Also, a symlink is automatically
# up to date when we update the base file.
@@ -135,9 +140,15 @@ $(top_builddir)/src/include/utils/fmgroi
cd $(dir $@) && rm -f $(notdir $@) && \
$(LN_S) ../../../$(subdir)/utils/fmgroids.h .
+$(top_builddir)/src/include/utils/probes.h: utils/probes.h
+ cd $(dir $@) && rm -f $(notdir $@) && \
+ $(LN_S) ../../../$(subdir)/utils/probes.h .
+
+ifeq ($(PORTNAME), solaris)
utils/probes.o: utils/probes.d $(SUBDIROBJS)
$(DTRACE) $(DTRACEFLAGS) -G -s $(call expand_subsys,$^) -o $@
+endif
##########################################################################
Index: src/backend/access/transam/xact.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xact.c,v
retrieving revision 1.257
diff -u -3 -p -r1.257 xact.c
--- src/backend/access/transam/xact.c 15 Jan 2008 18:56:59 -0000 1.257
+++ src/backend/access/transam/xact.c 28 Feb 2008 21:41:49 -0000
@@ -1479,7 +1479,7 @@ StartTransaction(void)
Assert(MyProc->backendId == vxid.backendId);
MyProc->lxid = vxid.localTransactionId;
- PG_TRACE1(transaction__start, vxid.localTransactionId);
+ POSTGRESQL_TRANSACTION_START(vxid.localTransactionId);
/*
* set transaction_timestamp() (a/k/a now()). We want this to be the same
@@ -1604,7 +1604,7 @@ CommitTransaction(void)
*/
latestXid = RecordTransactionCommit();
- PG_TRACE1(transaction__commit, MyProc->lxid);
+ POSTGRESQL_TRANSACTION_COMMIT(MyProc->lxid);
/*
* Let others know about no transaction in progress by me. Note that this
@@ -1990,7 +1990,7 @@ AbortTransaction(void)
*/
latestXid = RecordTransactionAbort(false);
- PG_TRACE1(transaction__abort, MyProc->lxid);
+ POSTGRESQL_TRANSACTION_ABORT(MyProc->lxid);
/*
* Let others know about no transaction in progress by me. Note that this
Index: src/backend/storage/lmgr/lock.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v
retrieving revision 1.181
diff -u -3 -p -r1.181 lock.c
--- src/backend/storage/lmgr/lock.c 2 Feb 2008 22:26:17 -0000 1.181
+++ src/backend/storage/lmgr/lock.c 28 Feb 2008 21:41:50 -0000
@@ -787,11 +787,11 @@ LockAcquire(const LOCKTAG *locktag,
* Sleep till someone wakes me up.
*/
- PG_TRACE2(lock__startwait, locktag->locktag_field2, lockmode);
+ POSTGRESQL_LOCK_STARTWAIT(locktag->locktag_field2, lockmode);
WaitOnLock(locallock, owner);
- PG_TRACE2(lock__endwait, locktag->locktag_field2, lockmode);
+ POSTGRESQL_LOCK_ENDWAIT(locktag->locktag_field2, lockmode);
/*
* NOTE: do not do any material change of state between here and
Index: src/backend/storage/lmgr/lwlock.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v
retrieving revision 1.50
diff -u -3 -p -r1.50 lwlock.c
--- src/backend/storage/lmgr/lwlock.c 1 Jan 2008 19:45:52 -0000 1.50
+++ src/backend/storage/lmgr/lwlock.c 28 Feb 2008 21:41:50 -0000
@@ -447,7 +447,7 @@ LWLockAcquire(LWLockId lockid, LWLockMod
block_counts[lockid]++;
#endif
- PG_TRACE2(lwlock__startwait, lockid, mode);
+ POSTGRESQL_LWLOCK_STARTWAIT(lockid, mode);
for (;;)
{
@@ -458,7 +458,7 @@ LWLockAcquire(LWLockId lockid, LWLockMod
extraWaits++;
}
- PG_TRACE2(lwlock__endwait, lockid, mode);
+ POSTGRESQL_LWLOCK_ENDWAIT(lockid, mode);
LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
@@ -469,7 +469,7 @@ LWLockAcquire(LWLockId lockid, LWLockMod
/* We are done updating shared state of the lock itself. */
SpinLockRelease(&lock->mutex);
- PG_TRACE2(lwlock__acquire, lockid, mode);
+ POSTGRESQL_LWLOCK_ACQUIRE(lockid, mode);
/* Add lock to list of locks held by this backend */
held_lwlocks[num_held_lwlocks++] = lockid;
@@ -540,13 +540,13 @@ LWLockConditionalAcquire(LWLockId lockid
/* Failed to get lock, so release interrupt holdoff */
RESUME_INTERRUPTS();
LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
- PG_TRACE2(lwlock__condacquire__fail, lockid, mode);
+ POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(lockid, mode);
}
else
{
/* Add lock to list of locks held by this backend */
held_lwlocks[num_held_lwlocks++] = lockid;
- PG_TRACE2(lwlock__condacquire, lockid, mode);
+ POSTGRESQL_LWLOCK_CONDACQUIRE(lockid, mode);
}
return !mustwait;
@@ -631,7 +631,7 @@ LWLockRelease(LWLockId lockid)
/* We are done updating shared state of the lock itself. */
SpinLockRelease(&lock->mutex);
- PG_TRACE1(lwlock__release, lockid);
+ POSTGRESQL_LWLOCK_RELEASE(lockid);
/*
* Awaken any waiters I removed from the queue.
Index: src/backend/utils/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/Makefile,v
retrieving revision 1.26
diff -u -3 -p -r1.26 Makefile
--- src/backend/utils/Makefile 19 Feb 2008 10:30:08 -0000 1.26
+++ src/backend/utils/Makefile 28 Feb 2008 21:41:50 -0000
@@ -13,12 +13,23 @@ SUBDIRS = adt cache error fmgr hash
include $(top_srcdir)/src/backend/common.mk
+ifeq ($(enable_dtrace), yes)
+all: fmgroids.h probes.h
+else
all: fmgroids.h
+endif
$(SUBDIRS:%=%-recursive): fmgroids.h
fmgroids.h fmgrtab.c: Gen_fmgrtab.sh $(top_srcdir)/src/include/catalog/pg_proc.h
AWK='$(AWK)' $(SHELL) $< $(top_srcdir)/src/include/catalog/pg_proc.h
+
+ifeq ($(enable_dtrace), yes)
+probes.h: probes.d
+ $(DTRACE) -h -s $< -o $@
+endif
+
+
clean:
- rm -f fmgroids.h fmgrtab.c
+ rm -f fmgroids.h fmgrtab.c probes.h
Index: src/include/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/Makefile,v
retrieving revision 1.23
diff -u -3 -p -r1.23 Makefile
--- src/include/Makefile 14 Oct 2007 17:07:51 -0000 1.23
+++ src/include/Makefile 28 Feb 2008 21:41:50 -0000
@@ -60,7 +60,7 @@ uninstall:
clean:
- rm -f utils/fmgroids.h parser/parse.h
+ rm -f utils/fmgroids.h parser/parse.h utils/probes.h
distclean maintainer-clean: clean
rm -f pg_config.h dynloader.h pg_config_os.h stamp-h
Index: src/include/c.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/c.h,v
retrieving revision 1.223
diff -u -3 -p -r1.223 c.h
--- src/include/c.h 23 Feb 2008 19:11:45 -0000 1.223
+++ src/include/c.h 28 Feb 2008 21:41:50 -0000
@@ -57,7 +57,11 @@
#include "pg_config_os.h" /* must be before any system header files */
#endif
#include "postgres_ext.h"
-#include "pg_trace.h"
+#ifdef ENABLE_DTRACE
+#include "utils/probes.h"
+#else
+#include "utils/probes_null.h"
+#endif
#if _MSC_VER >= 1400
#define errcode __msvc_errcode
Index: src/include/utils/probes_null.h
===================================================================
RCS file: src/include/utils/probes_null.h
diff -N src/include/utils/probes_null.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/include/utils/probes_null.h 28 Feb 2008 21:41:50 -0000
@@ -0,0 +1,47 @@
+/* ----------
+ * probes_null.h
+ *
+ * Definitions of probe macros used when DTrace is not enabled.
+ *
+ * Copyright (c) 2006-2008, PostgreSQL Global Development Group
+ *
+ * ----------
+ */
+
+#ifndef _PROBES_NULL_H
+#define _PROBES_NULL_H
+
+#define POSTGRESQL_LOCK_ENDWAIT(arg0, arg1)
+#define POSTGRESQL_LOCK_ENDWAIT_ENABLED()
+
+#define POSTGRESQL_LOCK_STARTWAIT(arg0, arg1)
+#define POSTGRESQL_LOCK_STARTWAIT_ENABLED()
+
+#define POSTGRESQL_LWLOCK_ACQUIRE(arg0, arg1)
+#define POSTGRESQL_LWLOCK_ACQUIRE_ENABLED()
+
+#define POSTGRESQL_LWLOCK_CONDACQUIRE(arg0, arg1)
+#define POSTGRESQL_LWLOCK_CONDACQUIRE_ENABLED()
+
+#define POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(arg0, arg1)
+#define POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL_ENABLED()
+
+#define POSTGRESQL_LWLOCK_ENDWAIT(arg0, arg1)
+#define POSTGRESQL_LWLOCK_ENDWAIT_ENABLED()
+
+#define POSTGRESQL_LWLOCK_RELEASE(arg0)
+#define POSTGRESQL_LWLOCK_RELEASE_ENABLED()
+
+#define POSTGRESQL_LWLOCK_STARTWAIT(arg0, arg1)
+#define POSTGRESQL_LWLOCK_STARTWAIT_ENABLED()
+
+#define POSTGRESQL_TRANSACTION_ABORT(arg0)
+#define POSTGRESQL_TRANSACTION_ABORT_ENABLED()
+
+#define POSTGRESQL_TRANSACTION_COMMIT(arg0)
+#define POSTGRESQL_TRANSACTION_COMMIT_ENABLED()
+
+#define POSTGRESQL_TRANSACTION_START(arg0)
+#define POSTGRESQL_TRANSACTION_START_ENABLED()
+
+#endif /* _PROBES_NULL_H */
В списке pgsql-patches по дате отправления: