🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #272356

Re: [SGCL] Odśmiecania współbieżnego ciąg dalszy

#272356
From: Artur Bać
Date: Wed, 27 Feb 2008 19:13
80 lines
3743 bytes
Sebastian Kaliszewski wrote:
>> Teraz postaw się w sytuacji (która mnie dotknęła) wytłumacz to
>> przeciętnemu koderowi języka z GC (i tylko jednego języka, bo tacy
>> jednojęzykowcy są tanii).
>>
>> Co mu powiesz?
> 
> Powiem mu, że jak plik otworzył, to musi dopilnować jego zamknięcia. Cała
> filozofia.

Przyklad z niby bardziej odpornego C# od javy, pokazujacy jak bardzo nie 
swiadomosc detali lub poleganie na automacie krzywdzi i jak latwo mozna 
pasc ofiara automatow i GC.

Sam w to wpadlem swego czasu i niestety zabolalo, aplikacja byla juz 
wersja produkcyjna i zawiodla w momncie gdy bylo ztroche a pozno na 
zabawe z kodem.

void Cos() {
  FileStream x = new ....
  using( BinaryWriter br = new BinaryReader (x) ) {
   	//blabla
  }
}

Pytanie 1:
Kiedy fs zwolni zasoby 'handle' do plikow.

a) po zakonczeniu scope using
b) po zakonczeniu scope Cos
c) po zakonczeniu programu lub gdy gc sie zlituje tj niewiadomo kiedy.

odpowiedz prawidlowa
c) br oleje fs, a destruktor fs niewiadomo kiedy bedzie wykonany.
dokladnie dzieje sie tak chyba z tego co rozumie iz dopuki ostatnia 
referencja nie zginie doputy wszelkie wywolania Dispose() zostana 
zignorowane a tu mamy az 2 kopie jedna posiada BianryWriter a druga jest 
zadeklarowana w obrebie metody.
Tak wiec zycze powodzenia z wolaniem metody Close na BianryWriter.


FaileStream z NET ma implementacje:

public virtual void Close()
{
     this.Dispose(true);
     GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
     if (disposing && (this._asyncActiveEvent != null))
     {
         this._CloseAsyncActiveEvent(Interlocked.Decrement(ref 
this._asyncActiveCount));
     }
}
private void _CloseAsyncActiveEvent(int asyncActiveCount)
{
     if ((this._asyncActiveEvent != null) && (asyncActiveCount == 0))
     {
         this._asyncActiveEvent.Close();
         this._asyncActiveEvent = null;
     }
}



Pytanie 2:
Kiedy progrmaista sie o tym zorientuje
a) mozliwe ze nigdy
b) gdy aplikacja sypnie sie u klienta
c) w trakcie testow
d) ciezko powiedziec, wszystkie mozliwosci sa relane

najblizsza prawdy
d) a jak sie sypnie to komunikat exception wyzuci sie z bardzo 
idiotycznym problemem kernela32.

W tak prostych przypadkach siadmosc kiedy zasoby sa zwalniane jest 
przydatna bo pozwala zrozumiec istote problemu.
Technical Details
Message-ID: <fq4co0$5en$1@news2.task.gda.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.task.gda.pl!not-for-mail
References: <fppvdq$68v$1@inews.gazeta.pl> <fq0od3$5bm$1@inews.gazeta.pl> <fq0qpa$ekv$1@inews.gazeta.pl> <fq0s58$jvv$1@inews.gazeta.pl> <fq0tjl$shn$1@news.vectranet.pl> <fq10ir$8nn$1@inews.gazeta.pl> <fq140s$2u6$1@news.vectranet.pl> <fq164t$3bl$1@inews.gazeta.pl> <fq1mqa$kqq$1@news.vectranet.pl> <fq42jk$k6t$1@bozon2.softax.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.task.gda.pl!not-for-mail
From: Artur Bać <artur_nospam@ebasoft.com.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: [SGCL]
 Odśmiecania współbieżnego ciąg dalszy
Date: Wed, 27 Feb 2008 20:13:01 +0100
Organization: CI TASK http://news.task.gda.pl/
Lines: 80
Message-ID: <fq4co0$5en$1@news2.task.gda.pl>
References: <fppvdq$68v$1@inews.gazeta.pl> <fq0od3$5bm$1@inews.gazeta.pl> <fq0qpa$ekv$1@inews.gazeta.pl> <fq0s58$jvv$1@inews.gazeta.pl> <fq0tjl$shn$1@news.vectranet.pl> <fq10ir$8nn$1@inews.gazeta.pl> <fq140s$2u6$1@news.vectranet.pl> <fq164t$3bl$1@inews.gazeta.pl> <fq1mqa$kqq$1@news.vectranet.pl> <fq42jk$k6t$1@bozon2.softax.pl>
NNTP-Posting-Host: www.ebasoft.com.pl
Mime-Version: 1.0
X-Trace: news2.task.gda.pl 1204139584 5591 85.237.185.105 (27 Feb 2008 19:13:04 GMT)
X-Complaints-To: abuse@news.task.gda.pl
NNTP-Posting-Date: Wed, 27 Feb 2008 19:13:04 +0000 (UTC)
X-Notice1: This post has been postprocessed on the news.task.gda.pl server.
X-Organization-Notice: Organization line has been filtered
X-Organization-Original: EBASoft
In-Reply-To: <fq42jk$k6t$1@bozon2.softax.pl>
User-Agent: Thunderbird 2.0.0.12 (Windows/20080213)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit