@@ -186,98 +186,80 @@ int SDW_add_file(thread_db* tdbb, const TEXT* file_name, SLONG start, USHORT sha
186
186
// and set up to release it in case of error. Align
187
187
// the spare page buffer for raw disk access.
188
188
189
- SCHAR* const spare_buffer =
190
- FB_NEW_POOL (*tdbb->getDefaultPool ()) char [dbb->dbb_page_size + PAGE_ALIGNMENT];
191
- // And why doesn't the code check that the allocation succeeds?
189
+ Array<UCHAR> temp;
190
+ UCHAR* const spare_page = temp.getAlignedBuffer (dbb->dbb_page_size , dbb->getIOBlockSize ());
191
+
192
+ // create the header using the spare_buffer
193
+
194
+ header_page* header = (header_page*) spare_page;
195
+ header->hdr_header .pag_type = pag_header;
196
+ header->hdr_sequence = sequence;
197
+ header->hdr_page_size = dbb->dbb_page_size ;
198
+ header->hdr_data [0 ] = HDR_end;
199
+ header->hdr_end = HDR_SIZE;
200
+ header->hdr_next_page = 0 ;
201
+
202
+ // fool PIO_write into writing the scratch page into the correct place
203
+ BufferDesc temp_bdb (dbb->dbb_bcb );
204
+ temp_bdb.bdb_page = next->fil_min_page ;
205
+ temp_bdb.bdb_buffer = (PAG) header;
206
+ header->hdr_header .pag_pageno = temp_bdb.bdb_page .getPageNum ();
207
+ // It's header, never encrypted
208
+ if (!PIO_write (tdbb, shadow_file, &temp_bdb, reinterpret_cast <Ods::pag*>(header), 0 ))
209
+ return 0 ;
192
210
193
- SCHAR* spare_page = FB_ALIGN (spare_buffer, PAGE_ALIGNMENT) ;
211
+ next-> fil_fudge = 1 ;
194
212
195
- try {
213
+ // Update the previous header page to point to new file --
214
+ // we can use the same header page, suitably modified,
215
+ // because they all look pretty much the same at this point
216
+
217
+ /* ******************
218
+ Fix for bug 7925. drop_gdb wan not dropping secondary file in
219
+ multi-shadow files. The structure was not being filled with the
220
+ info. Commented some code so that the structure will always be filled.
196
221
197
- // create the header using the spare_buffer
222
+ -Sudesh 07/06/95
223
+
224
+ The original code :
225
+ ===
226
+ if (shadow_file == file)
227
+ copy_header(tdbb);
228
+ else
229
+ ===
230
+ ************************/
198
231
199
- header_page* header = (header_page*) spare_page;
200
- header->hdr_header .pag_type = pag_header;
201
- header->hdr_sequence = sequence;
202
- header->hdr_page_size = dbb->dbb_page_size ;
232
+ // Temporarly reverting the change ------- Sudesh 07/07/95 *******
233
+
234
+ if (shadow_file == file)
235
+ {
236
+ copy_header (tdbb);
237
+ }
238
+ else
239
+ {
240
+ --start;
203
241
header->hdr_data [0 ] = HDR_end;
204
242
header->hdr_end = HDR_SIZE;
205
243
header->hdr_next_page = 0 ;
206
244
207
- // fool PIO_write into writing the scratch page into the correct place
208
- BufferDesc temp_bdb (dbb->dbb_bcb );
209
- temp_bdb.bdb_page = next->fil_min_page ;
210
- temp_bdb.bdb_buffer = (PAG) header;
245
+ PAG_add_header_entry (tdbb, header, HDR_file, static_cast <USHORT>(strlen (file_name)),
246
+ reinterpret_cast <const UCHAR*>(file_name));
247
+ PAG_add_header_entry (tdbb, header, HDR_last_page, sizeof (start),
248
+ reinterpret_cast <const UCHAR*>(&start));
249
+ file->fil_fudge = 0 ;
250
+ temp_bdb.bdb_page = file->fil_min_page ;
211
251
header->hdr_header .pag_pageno = temp_bdb.bdb_page .getPageNum ();
212
252
// It's header, never encrypted
213
253
if (!PIO_write (tdbb, shadow_file, &temp_bdb, reinterpret_cast <Ods::pag*>(header), 0 ))
214
- {
215
- delete[] spare_buffer;
216
254
return 0 ;
217
- }
218
- next->fil_fudge = 1 ;
219
-
220
- // Update the previous header page to point to new file --
221
- // we can use the same header page, suitably modified,
222
- // because they all look pretty much the same at this point
223
-
224
- /* ******************
225
- Fix for bug 7925. drop_gdb wan not dropping secondary file in
226
- multi-shadow files. The structure was not being filled with the
227
- info. Commented some code so that the structure will always be filled.
228
-
229
- -Sudesh 07/06/95
230
-
231
- The original code :
232
- ===
233
- if (shadow_file == file)
234
- copy_header(tdbb);
235
- else
236
- ===
237
- ************************/
238
-
239
- // Temporarly reverting the change ------- Sudesh 07/07/95 *******
240
-
241
- if (shadow_file == file)
242
- {
243
- copy_header (tdbb);
244
- }
245
- else
246
- {
247
- --start;
248
- header->hdr_data [0 ] = HDR_end;
249
- header->hdr_end = HDR_SIZE;
250
- header->hdr_next_page = 0 ;
251
-
252
- PAG_add_header_entry (tdbb, header, HDR_file, static_cast <USHORT>(strlen (file_name)),
253
- reinterpret_cast <const UCHAR*>(file_name));
254
- PAG_add_header_entry (tdbb, header, HDR_last_page, sizeof (start),
255
- reinterpret_cast <const UCHAR*>(&start));
256
- file->fil_fudge = 0 ;
257
- temp_bdb.bdb_page = file->fil_min_page ;
258
- header->hdr_header .pag_pageno = temp_bdb.bdb_page .getPageNum ();
259
- // It's header, never encrypted
260
- if (!PIO_write (tdbb, shadow_file, &temp_bdb, reinterpret_cast <Ods::pag*>(header), 0 ))
261
- {
262
- delete[] spare_buffer;
263
- return 0 ;
264
- }
265
- if (file->fil_min_page ) {
266
- file->fil_fudge = 1 ;
267
- }
268
- }
269
255
270
256
if (file->fil_min_page ) {
271
257
file->fil_fudge = 1 ;
272
258
}
259
+ }
273
260
274
- delete[] spare_buffer;
275
-
276
- } // try
277
- catch (const Firebird::Exception&)
278
- {
279
- delete[] spare_buffer;
280
- throw ;
261
+ if (file->fil_min_page ) {
262
+ file->fil_fudge = 1 ;
281
263
}
282
264
283
265
return sequence;
@@ -1004,9 +986,9 @@ void SDW_start(thread_db* tdbb, const TEXT* file_name,
1004
986
// catch errors: delete the shadow file if missing, and deallocate the spare buffer
1005
987
1006
988
shadow = NULL ;
1007
- SLONG* const spare_buffer =
1008
- FB_NEW_POOL (*tdbb-> getDefaultPool ()) SLONG[(dbb-> dbb_page_size + PAGE_ALIGNMENT) / sizeof (SLONG)] ;
1009
- UCHAR* spare_page = FB_ALIGN ((UCHAR*) spare_buffer, PAGE_ALIGNMENT );
989
+
990
+ Array<UCHAR> temp ;
991
+ UCHAR* const spare_page = temp. getAlignedBuffer (dbb-> dbb_page_size , dbb-> getIOBlockSize () );
1010
992
1011
993
WIN window (DB_PAGE_SPACE, -1 );
1012
994
jrd_file* shadow_file = 0 ;
@@ -1087,8 +1069,6 @@ void SDW_start(thread_db* tdbb, const TEXT* file_name,
1087
1069
1088
1070
PAG_init2 (tdbb, shadow_number);
1089
1071
1090
- delete[] spare_buffer;
1091
-
1092
1072
} // try
1093
1073
catch (const Firebird::Exception& ex)
1094
1074
{
@@ -1101,7 +1081,7 @@ void SDW_start(thread_db* tdbb, const TEXT* file_name,
1101
1081
PIO_close (shadow_file);
1102
1082
delete shadow_file;
1103
1083
}
1104
- delete[] spare_buffer;
1084
+
1105
1085
if ((file_flags & FILE_manual) && !delete_files) {
1106
1086
ERR_post (Arg::Gds (isc_shadow_missing) << Arg::Num (shadow_number));
1107
1087
}
0 commit comments