From a753e5d192a89f0695b7c753192812ba79aea2d2 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 30 Aug 1998 23:25:56 +0000 Subject: [PATCH] Fix for possible releasebuffer bug. --- src/backend/catalog/indexing.c | 41 ++++++++++++++++++----------------------- src/backend/parser/scan.c | 28 ++++++++++++++++------------ 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c index e13200c96b..504cca5c3f 100644 --- a/src/backend/catalog/indexing.c +++ b/src/backend/catalog/indexing.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.22 1998/08/20 22:07:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.23 1998/08/30 23:25:55 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -227,31 +227,26 @@ CatalogIndexFetchTuple(Relation heapRelation, { IndexScanDesc sd; RetrieveIndexResult indexRes; - HeapTuple tuple; + HeapTuple tuple = NULL; Buffer buffer; sd = index_beginscan(idesc, false, num_keys, skey); - tuple = (HeapTuple) NULL; - do + while ((indexRes = index_getnext(sd, ForwardScanDirection))) { - indexRes = index_getnext(sd, ForwardScanDirection); - if (indexRes) - { - ItemPointer iptr; + ItemPointer iptr; - iptr = &indexRes->heap_iptr; - tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer); - pfree(indexRes); - } - else + iptr = &indexRes->heap_iptr; + tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer); + pfree(indexRes); + if (HeapTupleIsValid(tuple)) break; - } while (!HeapTupleIsValid(tuple)); + } if (HeapTupleIsValid(tuple)) + { tuple = heap_copytuple(tuple); - - if (BufferIsValid(buffer)) ReleaseBuffer(buffer); + } index_endscan(sd); pfree(sd); @@ -333,7 +328,7 @@ ProcedureOidIndexScan(Relation heapRelation, Oid procId) (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_OIDEQ, - (Datum) procId); + ObjectIdGetDatum(procId)); idesc = index_openr(ProcedureOidIndex); tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1); @@ -359,7 +354,7 @@ ProcedureNameIndexScan(Relation heapRelation, (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_NAMEEQ, - (Datum) procName); + PointerGetDatum(procName)); ScanKeyEntryInitialize(&skey[1], (bits16) 0x0, @@ -371,7 +366,7 @@ ProcedureNameIndexScan(Relation heapRelation, (bits16) 0x0, (AttrNumber) 3, (RegProcedure) F_OID8EQ, - (Datum) argTypes); + PointerGetDatum(argTypes)); idesc = index_openr(ProcedureNameIndex); tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 3); @@ -394,7 +389,7 @@ ProcedureSrcIndexScan(Relation heapRelation, text *procSrc) (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_TEXTEQ, - (Datum) procSrc); + PointerGetDatum(procSrc)); idesc = index_openr(ProcedureSrcIndex); tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1); @@ -415,7 +410,7 @@ TypeOidIndexScan(Relation heapRelation, Oid typeId) (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_OIDEQ, - (Datum) typeId); + ObjectIdGetDatum(typeId)); idesc = index_openr(TypeOidIndex); tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1); @@ -436,7 +431,7 @@ TypeNameIndexScan(Relation heapRelation, char *typeName) (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_NAMEEQ, - (Datum) typeName); + PointerGetDatum(typeName)); idesc = index_openr(TypeNameIndex); tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1); @@ -477,7 +472,7 @@ ClassOidIndexScan(Relation heapRelation, Oid relId) (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_OIDEQ, - (Datum) relId); + ObjectIdGetDatum(relId)); idesc = index_openr(ClassOidIndex); tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1); diff --git a/src/backend/parser/scan.c b/src/backend/parser/scan.c index 0b9e8b4154..f7c3eb80b9 100644 --- a/src/backend/parser/scan.c +++ b/src/backend/parser/scan.c @@ -1,7 +1,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.24 1998/08/23 22:25:51 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.25 1998/08/30 23:25:56 momjian Exp $ */ #define FLEX_SCANNER @@ -555,7 +555,7 @@ char *yytext; * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.24 1998/08/23 22:25:51 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.25 1998/08/30 23:25:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1181,6 +1181,8 @@ YY_RULE_SETUP if (isascii((unsigned char)yytext[i]) && isupper(yytext[i])) yytext[i] = tolower(yytext[i]); + if (i >= NAMEDATALEN) + yytext[NAMEDATALEN-1] = '\0'; keyword = ScanKeywordLookup((char*)yytext); if (keyword != NULL) { @@ -1195,7 +1197,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 337 "scan.l" +#line 339 "scan.l" { char* endptr; @@ -1217,7 +1219,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 355 "scan.l" +#line 357 "scan.l" { char* endptr; @@ -1232,7 +1234,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 366 "scan.l" +#line 368 "scan.l" { char* endptr; @@ -1253,7 +1255,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 383 "scan.l" +#line 385 "scan.l" { char* endptr; @@ -1267,7 +1269,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 395 "scan.l" +#line 397 "scan.l" { int i; ScanKeyword *keyword; @@ -1276,6 +1278,8 @@ YY_RULE_SETUP if (isascii((unsigned char)yytext[i]) && isupper(yytext[i])) yytext[i] = tolower(yytext[i]); + if (i >= NAMEDATALEN) + yytext[NAMEDATALEN-1] = '\0'; keyword = ScanKeywordLookup((char*)yytext); if (keyword != NULL) { @@ -1290,20 +1294,20 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 414 "scan.l" +#line 418 "scan.l" { /* ignore */ } YY_BREAK case 40: YY_RULE_SETUP -#line 416 "scan.l" +#line 420 "scan.l" { return (yytext[0]); } YY_BREAK case 41: YY_RULE_SETUP -#line 418 "scan.l" +#line 422 "scan.l" ECHO; YY_BREAK -#line 1307 "lex.yy.c" +#line 1311 "lex.yy.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(xb): case YY_STATE_EOF(xc): @@ -2189,7 +2193,7 @@ int main() return 0; } #endif -#line 418 "scan.l" +#line 422 "scan.l" void yyerror(char message[]) -- 2.11.0