Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite499bcd

Browse files
committed
file.c: return back close on dispose
but in a gentle way
1 parente0df06f commite499bcd

File tree

1 file changed

+54
-26
lines changed

1 file changed

+54
-26
lines changed

‎src/utils/file.c

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3631,6 +3631,17 @@ pioLocalDrive_pioIsRemote(VSelf)
36313631
}
36323632

36333633
/* LOCAL FILE */
3634+
staticvoid
3635+
pioLocalFile_fobjDispose(VSelf)
3636+
{
3637+
Self(pioLocalFile);
3638+
if (!self->p.closed)
3639+
{
3640+
close(self->fd);
3641+
self->fd=-1;
3642+
self->p.closed= true;
3643+
}
3644+
}
36343645

36353646
staticerr_i
36363647
pioLocalFile_pioClose(VSelf,boolsync)
@@ -3911,40 +3922,49 @@ pioRemoteFile_pioSync(VSelf)
39113922
}
39123923

39133924
staticerr_i
3914-
pioRemoteFile_pioClose(VSelf,boolsync)
3925+
pioRemoteFile_doClose(VSelf)
39153926
{
3916-
Self(pioRemoteFile);
3917-
err_ierr=$noerr();
3918-
fio_headerhdr;
3927+
Self(pioRemoteFile);
3928+
err_ierr=$noerr();
3929+
fio_headerhdr;
39193930

3920-
ft_assert(self->handle >=0,"Remote closed file abused \"%s\"",self->p.path);
3931+
hdr= (fio_header){
3932+
.cop=FIO_CLOSE,
3933+
.handle=self->handle,
3934+
.size=0,
3935+
.arg=0,
3936+
};
39213937

3922-
if (sync&& (self->p.flags&O_ACCMODE)!=O_RDONLY)
3923-
err=pioRemoteFile_pioSync(self);
3938+
fio_fdset &= ~(1 <<hdr.handle);
3939+
IO_CHECK(fio_write_all(fio_stdout,&hdr,sizeof(hdr)),sizeof(hdr));
39243940

3925-
hdr= (fio_header){
3926-
.cop=FIO_CLOSE,
3927-
.handle=self->handle,
3928-
.size=0,
3929-
.arg=0,
3930-
};
3941+
/* Wait for response */
3942+
IO_CHECK(fio_read_all(fio_stdin,&hdr,sizeof(hdr)),sizeof(hdr));
3943+
ft_dbg_assert(hdr.cop==FIO_CLOSE);
39313944

3932-
fio_fdset &= ~(1 <<hdr.handle);
3933-
IO_CHECK(fio_write_all(fio_stdout,&hdr,sizeof(hdr)),sizeof(hdr));
3945+
if (hdr.arg!=0&&$isNULL(err))
3946+
{
3947+
err=$syserr((int)hdr.arg,"Cannot close remote file {path:q}",
3948+
path(self->p.path));
3949+
}
39343950

3935-
/* Wait for response */
3936-
IO_CHECK(fio_read_all(fio_stdin,&hdr,sizeof(hdr)),sizeof(hdr));
3937-
ft_dbg_assert(hdr.cop==FIO_CLOSE);
3951+
self->p.closed= true;
39383952

3939-
if (hdr.arg!=0&&$isNULL(err))
3940-
{
3941-
err=$syserr((int)hdr.arg,"Cannot close remote file {path:q}",
3942-
path(self->p.path));
3943-
}
3953+
returnerr;
3954+
}
39443955

3945-
self->p.closed= true;
3956+
staticerr_i
3957+
pioRemoteFile_pioClose(VSelf,boolsync)
3958+
{
3959+
Self(pioRemoteFile);
3960+
err_ierr=$noerr();
39463961

3947-
returnerr;
3962+
ft_assert(self->handle >=0,"Remote closed file abused \"%s\"",self->p.path);
3963+
3964+
if (sync&& (self->p.flags&O_ACCMODE)!=O_RDONLY)
3965+
err=pioRemoteFile_pioSync(self);
3966+
3967+
returnfobj_err_combine(err,pioRemoteFile_doClose(self));
39483968
}
39493969

39503970
staticsize_t
@@ -4245,6 +4265,14 @@ static void
42454265
pioRemoteFile_fobjDispose(VSelf)
42464266
{
42474267
Self(pioRemoteFile);
4268+
if (!self->p.closed)
4269+
{
4270+
err_ierr;
4271+
4272+
err=pioRemoteFile_doClose(self);
4273+
if ($haserr(err))
4274+
elog(WARNING,"%s",$errmsg(err));
4275+
}
42484276
$idel(&self->asyncError);
42494277
ft_free(self->asyncChunk);
42504278
}
@@ -4818,7 +4846,7 @@ pioCopyWithFilters(pioWriteFlush_i dest, pioRead_i src,
48184846
fobj_klass_handle(pioFile);
48194847
fobj_klass_handle(pioLocalDrive);
48204848
fobj_klass_handle(pioRemoteDrive);
4821-
fobj_klass_handle(pioLocalFile,inherits(pioFile),mth(fobjRepr));
4849+
fobj_klass_handle(pioLocalFile,inherits(pioFile),mth(fobjDispose,fobjRepr));
48224850
fobj_klass_handle(pioRemoteFile,inherits(pioFile),mth(fobjDispose,fobjRepr));
48234851
fobj_klass_handle(pioWriteFilter,mth(fobjDispose,fobjRepr));
48244852
fobj_klass_handle(pioReadFilter,mth(fobjDispose,fobjRepr));

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp