Category Archives: tech - Page 2

(Русский) Докатился…

boost::context and SEH

I have been using boost::context library to implement coroutines in my project since this library was officially released with boost 1.52. We desperately needed an option to replace win32 fibers (there is always at least a couple of points to justify such move), and boost::context came in just right.

It all worked fine until lately, when we discovered a very odd thing that was happening only on Windows Server 2008. If an exception was raised from within the context, the application was immideately closed by the OS. Even though that exception was handled in place.

As it turned, Windows Server 2008 has so-called SEH overwrite protection mechanism enabled by default. In shirt, every time exception is raised, the OS first checks that nobody messed with exception registration pointers. Each thread, or, broadly speaking, each parallel stack has its own exception registration information (pointer to which appears to be on the top of the thread info block or at FS:[0]). That registration record contains a pointer to exception handler and a pointer to the previous record in a chain (so, you can have a list of exception handlers). When user code wants to raise an exception, SEHOP protection mechanism of Windows Server 2008 walks back this list to make sure it always ends with a handler provided by the OS itself.

And here is the problem – with boost::context library you end up with parallel execution stacks, each of which having different thread information blocks (TIBs). And, while this library correctly initialized the TIB, in version 1.52 it didn’t bother replicating list of handlers from the original thread. Basically, it’s prev pointer was pointing somewere but definitely not where OS would expect it to point. It does not like it at all, and bang, your process is shot.

This SEHOP mechanism is explained in details on technet, and a lot of useful infomration about SEH could be found on microsoft website.

Apparently, a number of people implementing custom coroutine mechanism run into this issue before. Boost 1.53 has updated and fixed version of boost::context library that addresses exactly this problem.

BTW, SEHOP is included in Vista and Windows 7, is disabled by default, but can be enabled. List of known issues is quite impressive though:

After you enable SEHOP, existing versions of Cygwin, Skype, and Armadillo-protected applications may not work correctly.

First one!

My first published Android app

Get it on Google Play

It’s actually a small part of larger application I was working on lately.

Investigating managed crash dumps

Had to investigate a CLR crash dump and found a comprehensive walkthrough.

Must read, must bookmark, must know.

(Русский) И снова о пользе юнит-тестов

Sorry, this entry is only available in Russian.

(Русский) Новости высоких технологий

Sorry, this entry is only available in Russian.

Updated by blog platrofm

In short, updated to the latest version of WordPress; had to say goodbye to the multi-lingual gengo plugin that was unsupported since 2008 and I barely managed to keep it working by hacking it every now and then. Instead of gengo I now use qTranslate, which didn’t come without its own issues, but I managed to fix them rather quickly.

LJ-XP plugin does not work with qTranslate though. I am not even sure whether it worth fixing the plugin – to me, LJ keeps losing its appeal every day.

(Русский) Ненавиздь!

Sorry, this entry is only available in Russian.

(Русский) Кидок года

Sorry, this entry is only available in Russian.

(Русский) Снова потребительское

Sorry, this entry is only available in Russian.

2 visitors online now
0 guests, 2 bots, 0 members
Max visitors today: 23 at 12:39 am UTC
This month: 57 at 04-16-2021 08:12 am UTC
This year: 57 at 04-16-2021 08:12 am UTC
All time: 332 at 11-22-2019 03:23 am UTC